我看过像
这样的事情[:toto, :tata, :titi].each do |kind|
if "create_#{kind}" do
something
end
end
方法create_toto
,create_tata
和create_titi
在别处定义。
我想知道是否可以使用方法定义来实现它。我有多个名为end_{something}
的方法,它们做同样的事情,我想知道是否可以将它们组合成一个,使用与上面相同的机制。
答案 0 :(得分:3)
注意表达式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