我正在编写一个类方法来创建另一个类方法.似乎是围绕着如何一些陌生感class_eval和instance_eval类方法的范围内进行操作.为了显示:
class Test1
def self.add_foo
self.class_eval do # does what it says on the tin
define_method :foo do
puts "bar"
end
end
end
end
Test1.add_foo # creates new instance method, like I'd expect
Test1.new.foo # => "bar"
class Test2
def self.add_foo
self.instance_eval do # seems to do the same as "class_eval"
define_method :foo do
puts "bar"
end
end
end
end
Test2.add_foo # what is happening here?!
Test2.foo # => NoMethodError
Test2.new.foo # => "bar"
class Test3 …Run Code Online (Sandbox Code Playgroud) 可能重复:
Ruby中的类<< self idiom
我想知道这段代码在做什么.我并不低估这一行.我知道是什么attr_accessor.
class User
class << self; attr_accessor :base_uri end
....
....
...
Run Code Online (Sandbox Code Playgroud)