2013-09-05 46 views
2

我有下面的代码,但它无法运行:如何使用字符串插值创建动态方法?

%w(acp bcp ccp tcp).each do |kind| 
    define_method(kind+"_name") { send "[#{kind}_title ? #{kind}_title.title : '',#{kind}_firstname,#{kind}_lastname].join(' ')" } 
end 

运行时:

> Form.last.acp_name 
NoMethodError: undefined method `[acp_title ? acp_title.title : '',acp_firstname,acp_lastname].join(' ')' for #<Form:0x108daabe8> 

任何人有任何想法如何解决它,从而为代码运行而不是字面请?

在此先感谢...

+1

重构手段来简化代码,而不改变其行为。修复一个bug不是重构,因为不运行的代码和代码的行为不同。 – sawa

+1

谢谢,那确实是正确的说,问题改进了! – Cacofonix

回答

4
%w(acp bcp ccp tcp).each do |kind| 
    define_method("#{ kind }_name") do 
    title = send("#{ kind }_title") || '' 
    array = [ title, send("#{ kind }_firstname"), send("#{ kind }_lastname")] 
    array.join(' ') 
    end 
end 
+0

非常感谢! – Cacofonix

相关问题