我见过类似的东西
[:toto, :tata, :titi].each do |kind|
if "create_#{kind}" do
something
end
end
其中方法create_toto
、create_tata
和create_titi
在别处定义。
我想知道是否可以使用方法定义来做到这一点。我有多个名为 end_{something}
的方法,它们做同样的事情,我想知道是否可以将它们分组为一个,具有与上面相同的机制。
请注意表达式if "create_#{kind}"
将始终返回 true,您可能是指检查是否定义了方法defined?("create_#{kind}")
。
您可以使用"method_missing"方法:
def method_missing(method_name, *arguments, &block)
method = method_name.to_s
case method
when 'create_toto'
#do somthing
when 'create_tata'
#do somthing
when 'create_titi'
#do somthing
else
super
end
end
您还可以动态定义方法:
[:toto, :tata, :titi].each do |kind|
define_method "create_#{kind}" do
#do something
end
end