Project1

标题: 请教实例变量(以@开头)与全局变量(以$开头)之间的转换 [打印本页]

作者: taeckle    时间: 2021-9-5 23:14
标题: 请教实例变量(以@开头)与全局变量(以$开头)之间的转换
本帖最后由 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
复制代码


还请大家指点一二,多谢了!
作者: enghao_lim    时间: 2021-9-5 23:30
  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当然没有问题。
作者: alexncf125    时间: 2021-9-5 23:37





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1