我在一个类中使用动态创建方法的类中的代码define_method
。我想将其分为两部分,以使代码更易于理解。我需要将部分代码放入私有块中。
这是我的代码的外观:
class Foo
["bar", "baz"].each do |method|
create_method(method)
end
private
def create_method(name)
define_method(name) do
puts "HELL"
end
end
end
Foo.new.bar
Foo:Class的'create_method'(NoMethodError)
我不明白为什么它不起作用。
您的代码有几个问题。您得到的错误与private
或与之完全无关public
。错误消息说create_method
找不到该方法。这有两个原因:
create_method
在定义之后将呼叫移至。create_method
被定义为实例方法,即用于在的实例上调用它Foo
,但您是在Foo
自身上调用它。你必须将它定义为一个方法某处Foo
的类(即Class
它的祖先),一个(例如Module
),或Foo
的单例类。我将在Foo
这里将其定义为单例方法,但是如果该方法确实像您在示例中所展示的那样通用,则它可能属于其中Module
。
class Foo
class << self
private
def create_method(name)
define_method(name) do
puts "HELL"
end
end
end
["bar", "baz"].each do |method|
create_method(method)
end
end
Foo.new.bar
# HELL
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句