我正在读Ruby中的Metaprogramming一书。在那本书中,当我阅读有关范围门的内容时,显示了以下代码
my_var = "Success"
MyClass = Class.new do
puts "#{my_var} in the class definition"
define_method :my_method do
puts "#{my_var} in the method"
end
end
MyClass.new.my_method
=>Success in the class definition
Success in the method现在,当我在下面的代码中执行时,我得到一个错误消息: undefined method my_method MyClass.new MyClass:0x00000100936a30
MyClass.my_method
NoMethodError: undefined method `my_method' for MyClass:Class
from (irb):11
from /usr/local/bin/irb:12:in `<main>'当my_method被称为MyClass.new.my_method而不是MyClass.my_method时,为什么要创建它?
发布于 2010-08-11 12:04:22
define_method方法将实例方法添加到类中。当您在匿名类中调用define_method时,您的方法将被添加为实例方法。要将其添加为类方法,必须将其添加到元类中。
最简单的方法是使用class << self语法。
MyClass = Class.new do
class << self
define_method(:my_method) do
puts "class method"
end
end
end
MyClass.my_method # => "class method"https://stackoverflow.com/questions/3455101
复制相似问题