查看: 1157|回复: 4

[已经解决] 脚本中如何 调用其他 方法中的变量?

  [复制链接]
梦石
0
星屑
368
在线时间
94 小时
注册时间
2008-1-13
回帖
15
发表于 2009-9-16 03:08:09 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 jay999 于 2009-9-17 16:56 编辑

脚本中如何 调用其他 方法中的变量?
1.比如一个类里的一个方法a要调用另一个方法b的变量如何调用?调用其他类的变量呢?
2.运算符::是什么意思?

谢谢楼下几位的回答 尤其是紫苏 很详细
梦石
0
星屑
64
在线时间
4352 小时
注册时间
2007-8-31
回帖
1905
发表于 2009-9-16 03:42:49 | 显示全部楼层
从外部引用常量要用到“::”运算符。
我真是王小二过年,一年不如一年。目前正在寻找状态中,努力找回当初的动力!
“底蕴制作者”—asperta最新博客开通!以后将在这里更新制作进度报告!
我的作品官网:http://www.asperta.org/
ASPERTA世界论坛:http://bbs.asperta.org/


回复

使用道具 举报

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
回帖
1912
发表于 2009-9-16 05:14:58 | 显示全部楼层
  • 姑且假设你说的“其它方法中的变量”是指局部变量……
    所谓的局部变量就是在一个局部范围内使用的变量,它的生命,或者说作用域仅仅在于局部,压根儿就不是用来在外部调用的,要在外部用的话,自然就应该使用这个“外部”范围内也存在的变量(实例变量 @、类变量 @@ 或全局变量 $)
    不过 Ruby 也并非完全不可能获取其它方法中的局部变量~我们可以获取那个方法的执行上下文环境,并保存下来,这样就可以在其它地方去访问属于这个上下文环境的局部变量了:
    1. def fn
    2.   a = 9999
    3.   $my_binding = binding
    4. end

    5. fn

    6. eval("p a", $my_binding)   # => 9999
    复制代码
    这就是 Ruby 的 binding 机制
    不过,访问其它上下文中的局部变量的前提是这个上下文存在过,所以你才能通过 binding 得到它的环境……而你说的在一个类的一个方法中调用另一个方法的变量,这“另一个方法”通常是没有调用过的,所以它的局部上下文没有产生。因此,这时你肯定应该使用作用域更大的变量——如果你的方法是实例方法,那就应该用实例变量;如果你的方法是类方法,那就应该用类变量

    至于你说的其它类的变量,还是指代不明……如果是说其它类的类变量,那么可以定义一个类方法,直接返回这个类变量即可;如果是说其它类的实例变量,那必须要生成类的实例,才能通过实例来访问这个实例变量
  • :: 是一个名字空间的修饰运算符。变量和函数都有定义了它的一个名字空间(正如文件有一个包含了它的文件夹),而在一个名字空间中要访问其它名字空间的变量/函数,就需要通过这个运算符来修饰该变量/函数的名字,比如 Math::PI,就是因为 PI 是在 Math 这个模块(名字空间)中定义的一个常量;Struct::Tms,就是因为 Tms 是在 Struct 这个模块中定义的类~
回复

使用道具 举报

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
回帖
1260

贵宾

发表于 2009-9-16 11:00:36 | 显示全部楼层
借个地方问个问题eval的第2个参数是何意义?
-.-
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
50
在线时间
21 小时
注册时间
2007-7-3
回帖
570
发表于 2009-9-16 11:17:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部