Ruby 《Ruby 元编程》中顶级作用域的疑惑

edokeh · 2012年04月09日 · 最后由 lyfi2003 回复于 2013年07月25日 · 3843 次阅读

最近翻阅《Ruby 元编程》时偶然发现有这样一段阐述 “当在顶级作用域中定义方法时,这个方法会成为 Object 类实例方法”(参见 104 页)但是我实际执行以下的 ruby 程序的时候,发现跟这段阐述不符

def do_sth
  return "done!"
end
puts self.methods.grep(/^do/).inspect
puts Object.instance_methods.grep(/^do/).inspect

求大伙解惑

顶级作用域使用 main 来标记, main 是 Object 的一个实例化对象. 在里面定义的方法默认为成为 Object 的私有方法.

def do_sth
  return "done!"
end
class A
  def a
    do_sth
  end

  def self.a
    do_sth
  end
end

puts self.private_methods.include?("do_sth") # => true
puts Object.private_methods.include?("do_sth") # => true
A.new.a #=> ok
A.a #=> ok

#1 楼 @lyfi2003 原来是私有方法,忘了这茬了,感谢

前对象是 main, 为什么不是单例方法呢

#1 楼 @lyfi2003 同问 3L 的问题

@alsotang main 是一个 Object 的实例,对它而言就是单例方法。

#1 楼 @lyfi2003 大哥,你真的跑过你的代码吗??那两个 puts 语句都是 false #2 楼 @edokeh #3 楼 @moofox

@alsotang hi~ 你老发什么火,在 ruby1.8.7 ruby1.9.3 都没有问题。在 2.0 返回的内容改为符号而不是字符串了,但不影响这里理解问题。你为什么不发出你使用的 Ruby 版本呢?测试过哪些版本?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册