【问题标题】:Where does Ruby store method defined in instance_eval()instance_eval() 中定义的 Ruby 存储方法在哪里
【发布时间】:2012-03-14 10:05:56
【问题描述】:

这是一个例子:

class MyClass
end

obj = MyClass.new
obj.instance_eval do
  def hello
    "hello"
  end
end

obj.hello
# => "hello"

obj.methods.grep "hello"
# => ["hello"]

MyClass.instance_methods.grep "hello"
# => []

MyClass 的实例方法不包含 'hello' 方法,所以我的问题是 Ruby 将 instance_eval() 中定义的方法存储在哪里?

【问题讨论】:

  • 第一个定义是否有错字?

标签: ruby instance-eval


【解决方案1】:

看看这个:

obj = MyClass.new
def obj.hello
  "hello"
end

obj.hello #=> "hello"
obj.singleton_methods #=> [:hello]
obj.methods.grep :hello #=> [:hello]

obj.instance_eval do
  def hello2 ; end
end #

obj.singleton_methods #=> [:hello, :hello2]

如您所见,您也可以直接在对象上定义方法,而不是使用instance_eval。在这两种情况下,它们都以对象的单例类 (eigenclass) 结尾,可通过 Ruby 1.9 中的 obj.singleton_class 和 Ruby 1.8 中的 class << self ; self; end 习惯用法访问。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 2010-12-18
    • 1970-01-01
    • 2018-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多