Project1
标题:
脚本中如何 调用其他 方法中的变量?
[打印本页]
作者:
jay999
时间:
2009-9-16 03:08
标题:
脚本中如何 调用其他 方法中的变量?
本帖最后由 jay999 于 2009-9-17 16:56 编辑
脚本中如何 调用其他 方法中的变量?
1.比如一个类里的一个方法a要调用另一个方法b的变量如何调用?调用其他类的变量呢?
2.运算符::是什么意思?
谢谢楼下几位的回答 尤其是紫苏 很详细
作者:
asperta
时间:
2009-9-16 03:42
从外部引用常量要用到“::”运算符。
作者:
紫苏
时间:
2009-9-16 05:14
姑且假设你说的“其它方法中的变量”是指局部变量……
所谓的局部变量就是在一个局部范围内使用的变量,它的生命,或者说作用域仅仅在于局部,压根儿就不是用来在外部调用的,要在外部用的话,自然就应该使用这个“外部”范围内也存在的变量(实例变量 @、类变量 @@ 或全局变量 $)
不过 Ruby 也并非完全不可能获取其它方法中的局部变量~我们可以获取那个方法的执行上下文环境,并保存下来,这样就可以在其它地方去访问属于这个上下文环境的局部变量了:
def fn
a = 9999
$my_binding = binding
end
fn
eval("p a", $my_binding) # => 9999
复制代码
这就是 Ruby 的 binding 机制
不过,访问其它上下文中的局部变量的前提是这个上下文存在过,所以你才能通过 binding 得到它的环境……而你说的在一个类的一个方法中调用另一个方法的变量,这“另一个方法”通常是没有调用过的,所以它的局部上下文没有产生。因此,这时你肯定应该使用作用域更大的变量——如果你的方法是实例方法,那就应该用实例变量;如果你的方法是类方法,那就应该用类变量
至于你说的其它类的变量,还是指代不明……如果是说其它类的类变量,那么可以定义一个类方法,直接返回这个类变量即可;如果是说其它类的实例变量,那必须要生成类的实例,才能通过实例来访问这个实例变量
:: 是一个名字空间的修饰运算符。变量和函数都有定义了它的一个名字空间(正如文件有一个包含了它的文件夹),而在一个名字空间中要访问其它名字空间的变量/函数,就需要通过这个运算符来修饰该变量/函数的名字,比如 Math::PI,就是因为 PI 是在 Math 这个模块(名字空间)中定义的一个常量;Struct::Tms,就是因为 Tms 是在 Struct 这个模块中定义的类~
作者:
神思
时间:
2009-9-16 11:00
借个地方问个问题eval的第2个参数是何意义?
作者:
goahead
时间:
2009-9-16 11:17
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1