锁定老帖子 主题:ruby 函数到底是按值传递还是按引用
精华帖 (0) :: 良好帖 (1) :: 新手帖 (3) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-16
fc_lamp 写道
[quote="sevk"]ruby里,最复杂的地方是这里吧???
对此略懂, 简单解答下你的问题, 这块确实是ruby深入理解的关键点.
首先,要明白一点: Ruby一切皆对象.
什么意思呢? Ruby一个类也是一个对象(使用XX.class知道它的类是Class),它也具备方法(即所谓的类方法). 这个可以称之谓元类(MetaClass)
而Ruby中调用方法逻辑很简单: 1. 查询该对象所属类中的所有方法,如果存在调用之,如果不存在则调用父类的方法. 2. 如果回溯到顶级类,还不存在则调用method_missing, 默认抛出NoMethodError异常.
那分析下该输出
i1 = T1.new
#attr_reader :vtest #end 来打开元类的该方法,当然再赋个值,要不是空值.
这里讲的比较简单,参考: http://thinkinginruby.group.iteye.com/group/wiki/1275-class-with-the-module
更可以搜索Google: 关键字 Ruby MetaClass
如有不懂也可站内留言. Hope this helps.
|
|
返回顶楼 | |
发表时间:2011-11-17
@ruby_windy
例如:
class T1
|
|
返回顶楼 | |
发表时间:2011-11-18
最后修改:2011-11-18
fc_lamp 写道
@ruby_windy
例如:
class T1
而写在类定义中,则有类所有, 即ruby允许在类中作定义,属于谁由当时的self决定.
根据以上分析,所以
puts "i1.get_v1: #{i1.get_v1}" #输出 bbb in init 与 puts "T1.get_v1: #{T1.get_v1}" #输出 ! aaa ! 区别 答: i1.get_v1 得到 bbb in init, 而 T1.get_v1得到类中定义的变量, ! aaa !
puts "i1.v3: #{i1.v3}" #输出 这里是空的 与 puts "i1.vtest: #{i1.vtest}" #输出 vtest 区别 答: i1.v3 要输出实例变量@v3,这在我们初始化方法中未定义,所以为空. i1.vtest 由于@vtest在initialize定义过,所以输出为 vtest
实际上,看似复杂,其实很简单,一定要明白不同环境下的self是指什么,那么一切就明白了. |
|
返回顶楼 | |
发表时间:2011-12-02
有点不喜欢ruby里的这么多符号,
还是python简洁 |
|
返回顶楼 | |