有没有办法搞砸这个Rails代码?
def function
if new_record?
thing
else
thing + yet_another_thing
end
end
我不喜欢在这里重复thing
,所以我想知道是否有更清洁的方式。
感谢您的帮助。
答案 0 :(得分:3)
这适用于支持+,(甚至字符串。)
的任何对象 [thing, (yet_another_thing unless new_record?)].compact.inject(:+)
它干涩而且可怕,就像被困在没有任何水的沙漠中一样。
你也可以逃脱:
thing.dup.tap{|t| t << yet_another_thing unless new_record?}
如果thing是一个整数(你不能复制它),它将无法工作,它还需要支持&lt;&lt;操作
同样干,但以不同的方式吓人。
答案 1 :(得分:1)
三元运算符怎么样?
def function
new_record? ? thing : (thing + yet_another_thing)
end
如果我们知道您在使用此变量或变量中包含的内容,这将会更有帮助。
答案 2 :(得分:0)
如果您不想重复thing
,那么这可能是一个解决方案。
def function
result = thing
result += yet_another_thing unless new_record?
result
end
答案 3 :(得分:0)
如果
,您可以使用内联def function
return thing if new_record?
thing + yet_another_thing
end
答案 4 :(得分:0)
如果thing
和yet_another_thing
是字符串,则可以执行此操作:
thing + (yet_another_thing unless new_record?).to_s
答案 5 :(得分:0)
如果thing和yet_another_thing是您正在调用的方法:
def function
thing
yet_another_thing if new_record?
end