查看: 2623|回复: 2

[已经解决] 请教实例变量(以@开头)与全局变量(以$开头)之间的转换

[复制链接]
梦石
0
星屑
9160
在线时间
466 小时
注册时间
2015-5-8
回帖
704
发表于 2021-9-5 23:14:40 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 taeckle 于 2021-9-5 23:21 编辑

我在class Game_System里最开头就定义了一个实例变量(比如就叫bianliang_1,  attr_accessor : bianliang_1),然后在 class Game_System的def initialize里初始化这个实例变量(比如就把这个变量的值设定为1: @bianliang_1=1), 请问下为何就能在游戏的所有其他class里用个全局变量"$game_system.bianliang_1"来调用这个实例变量了呢?咱明明定义的是一个以@开头的实例变量,咋就成了以$开头的全局变量了呢?具体代码长这样:

  1. class Game_System
  2. attr_accessor : bianliang_1
  3.   def initialize
  4. @bianliang_1=1
  5.   end
  6. end
复制代码


还请大家指点一二,多谢了!
梦石
0
星屑
8003
在线时间
1184 小时
注册时间
2007-7-29
回帖
2014
发表于 2021-9-5 23:30:13 | 显示全部楼层
  1. attr_accessor : bianliang_1
复制代码

attr_accessor将该变量赋予了公开读写。
所以Game_System的任何对象都可以使用.bianliang_1来读写。
举例:
  1. test = Game_System.new()
  2. p test.bianliang_1 #=> 1
复制代码

为何是全局,因为对象是全局变量:
  1. $game_system = Game_System.new()
复制代码

全局变量的是$game_system,不是@bianliang_1。既然已经设置@bianliang_1为公开读写,那先通过全局变量的$game_system读取对象公开的变量bianliang_1当然没有问题。

评分

参与人数 2星屑 +50 赞 +2 收起 理由
RyanBern + 50 + 1 认可答案
taeckle + 1 最佳答案!

查看全部评分

回复

使用道具 举报

梦石
0
星屑
29896
在线时间
5733 小时
注册时间
2016-3-8
回帖
1653
发表于 2021-9-5 23:37:29 | 显示全部楼层

评分

参与人数 1赞 +1 收起 理由
taeckle + 1 塞糖

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部