Project1
标题: 【提问】类里的变量寿命问题 [打印本页]
作者: ORANGI 时间: 2014-11-1 19:53
标题: 【提问】类里的变量寿命问题
# Problem 1
# 我在类里定义的变量,在函数(方法)中使用的时候提示不存在。
class Window_TitleCommand < Window_Command
@img_the_story = {}
@img_the_story["oi"] = Cache.img_titlecommand("Option.png")
@img_the_story = Cache.img_titlecommand("Option.png")
# 函数体
def img_rect_test
@img_the_story["hl"] = (Cache.img_titlecommand("Option_hl.png"))
contents.blt(x,y,@img_the_story["oi"],@img_the_story["oi"].rect)
end
#
# ...
#
end
class Window_TitleCommand < Window_Command
@img_the_story = {}
@img_the_story["oi"] = Cache.img_titlecommand("Option.png")
@img_the_story = Cache.img_titlecommand("Option.png")
# 函数体
def img_rect_test
@img_the_story["hl"] = (Cache.img_titlecommand("Option_hl.png"))
contents.blt(x,y,@img_the_story["oi"],@img_the_story["oi"].rect)
end
#
# ...
#
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
class Window_TitleCommand < Window_Command
# the instance variable of Window_TitleCommand
# it will last forever, unless the class Window_TitleCommand is destroyed
@img_the_story = {}
@img_the_story["oi"] = Cache.img_titlecommand("Option.png")
@img_the_story = Cache.img_titlecommand("Option.png")
# 函数体
def img_rect_test
# the instance variable of an instance of Window_TitleCommand
# it will exist as long as the instance exists
@img_the_story["hl"] = (Cache.img_titlecommand("Option_hl.png"))
contents.blt(x,y,@img_the_story["oi"],@img_the_story["oi"].rect)
end
#
# ...
#
end
class Window_TitleCommand < Window_Command
# the instance variable of Window_TitleCommand
# it will last forever, unless the class Window_TitleCommand is destroyed
@img_the_story = {}
@img_the_story["oi"] = Cache.img_titlecommand("Option.png")
@img_the_story = Cache.img_titlecommand("Option.png")
# 函数体
def img_rect_test
# the instance variable of an instance of Window_TitleCommand
# it will exist as long as the instance exists
@img_the_story["hl"] = (Cache.img_titlecommand("Option_hl.png"))
contents.blt(x,y,@img_the_story["oi"],@img_the_story["oi"].rect)
end
#
# ...
#
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 |