我想弄清楚如何动态创建方法
class MyClass
def initialize(dynamic_methods)
@arr = Array.new(dynamic_methods)
@arr.each { |m|
self.class.class_eval do
def m(*value)
puts value
end
end
}
end
end
tmp = MyClass.new ['method1', 'method2', 'method3']
不幸的是,这只创建了方法 m 但我需要根据 m 的值创建方法,想法?
有两种可接受的方式:
-
Use 定义方法 http://ruby-doc.org/core/classes/Module.html#M001654:
@arr.each do |method|
self.class.class_eval do
define_method method do |*arguments|
puts arguments
end
end
end
-
Use 类评估 http://ruby-doc.org/core/classes/Module.html#M001650带字符串参数:
@arr.each do |method|
self.class.class_eval <<-EVAL
def #{method}(*arguments)
puts arguments
end
EVAL
end
第一个选项将闭包转换为方法,第二个选项评估字符串(heredoc)并使用常规方法绑定。调用这些方法时,第二个选项具有非常小的性能优势。第一个选项(可以说)更具可读性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)