【发布时间】:2013-11-02 14:24:13
【问题描述】:
class Temp1
def add(s)
match = 'test'
self.class.class_eval do
define_method(s) do
puts match
end
end
#match ='haha'
end
end
在我看来,'match' 是一个局部变量,所以我不明白它如何从另一种方法中看到它,另外,如果取消注释 #match ='haha',方法会以某种方式打印'haha'。谁能解释一下?
另外,我没有看到使用 class_eval 或 instance_eval 之间的区别,似乎它做同样的事情。
最后但同样重要的是,我可以在这里使用define_method 创建类方法吗?所以我可以把它称为 Temp1.something 而不是 Temp1.new.something?
【问题讨论】:
标签: ruby-on-rails ruby metaprogramming