Project1

标题: 【提问】类里的变量寿命问题 [打印本页]

作者: ORANGI    时间: 2014-11-1 19:53
标题: 【提问】类里的变量寿命问题
# Problem 1

# 我在类里定义的变量,在函数(方法)中使用的时候提示不存在。

RUBY 代码复制
  1. class Window_TitleCommand < Window_Command
  2.  
  3.   @img_the_story = {}
  4.   @img_the_story["oi"] = Cache.img_titlecommand("Option.png")
  5.   @img_the_story = Cache.img_titlecommand("Option.png")
  6.   # 函数体
  7.   def img_rect_test
  8.     @img_the_story["hl"] = (Cache.img_titlecommand("Option_hl.png"))
  9.     contents.blt(x,y,@img_the_story["oi"],@img_the_story["oi"].rect)
  10.   end
  11.  
  12. #
  13. # ...
  14. #
  15.  
  16. end


# 但是当我把定义写在函数(方法)体内,则顺利执行;去掉 @ 标识也通不过解释。
#############################################################################################################

# Problem 2

# Window_Command 类中 add_command 的用法,这个函数(方法)有四个参数,其中第四个参数 ext 提示的是可扩展数据,
# 那它可以是一个 Bitmap 对象,甚至是链表或者哈希表的一个元素吗?

#############################################################################################################

# Problem 3

# nil 的用法。nil 应该用在什么场合?值为 nil 变量能用 Bitmap 对象再赋值吗?

#############################################################################################################

# 谢谢大家的指导和指教!o(∩_∩)o
作者: taroxd    时间: 2014-11-1 20:09
本帖最后由 taroxd 于 2014-11-1 20:13 编辑

文本编辑器对输入法支持不好,英文解释凑合看看吧

# Problem 1

# 我在类里定义的变量,在函数(方法)中使用的时候提示不存在。

see the comment
RUBY 代码复制
  1. class Window_TitleCommand < Window_Command
  2.       # the instance variable of Window_TitleCommand
  3.       # it will last forever, unless the class Window_TitleCommand is destroyed
  4.       @img_the_story = {}
  5.  
  6.       @img_the_story["oi"] = Cache.img_titlecommand("Option.png")
  7.       @img_the_story = Cache.img_titlecommand("Option.png")
  8.       # 函数体
  9.       def img_rect_test
  10.         # the instance variable of an instance of Window_TitleCommand
  11.         # it will exist as long as the instance exists
  12.         @img_the_story["hl"] = (Cache.img_titlecommand("Option_hl.png"))
  13.         contents.blt(x,y,@img_the_story["oi"],@img_the_story["oi"].rect)
  14.       end
  15.  
  16.     #
  17.     # ...
  18.     #
  19.  
  20.     end


# Problem 2

# Window_Command 类中 add_command 的用法,这个函数(方法)有四个参数,其中第四个参数 ext 提示的是可扩展数据,
# 那它可以是一个 Bitmap 对象,甚至是链表或者哈希表的一个元素吗?

ok.

#############################################################################################################

# Problem 3

# nil 的用法。nil 应该用在什么场合?值为 nil 变量能用 Bitmap 对象再赋值吗?

nil is just an object indicating 'nothing'. It can be used in a if statement, just like false.

Actually, you may be frequently using nil in an if condition, even without knowing it!

Just treat it as false.

The variable can always be assigned with a bitmap, or an object of any class.

#############################################################################################################

作者: test    时间: 2014-11-1 20:10
本帖最后由 test 于 2014-11-1 21:03 编辑

>问题1
把@xxx的变量定义到类的initialize方法里。
@xxx是类实例变量,实例化之后在当前的实例里面有效。
@@xxx是类变量,在同一个类里面共通使用,在一个实例里改变它,其他实例里也会跟着变。
xxx是局部变量,只在当前函数里面有效。
$xxx是全局变量,从定义开始任何地方都有效。

>问题2
可以。

>问题3
nil表示什么都没有。
nil通常可以用来判断变量是否定义、数组或哈希表某个元素是否存在等等。

>值为 nil 变量能用 Bitmap 对象再赋值吗?
这句话不知道什么意思。变量不管值是什么都可以重新赋值(?)
作者: taroxd    时间: 2014-11-1 21:45
刚刚文本编辑器没弄好中文输入法,抱歉……

ruby 的 initialize 并没有像 C++ 的构造函数那样有严格的先后顺序。事实上你可以创建一个类的对象而不调用这个类的 initialize 方法(这是邪道,我就不说怎么做了)
注意,Ruby 的 new 并不是关键字。new 只是在创建对象之后顺便帮你调用了一下 initialize 而已。因此并不需要把 initialize 特殊看待




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