有沒有辦法讓這個Rails代碼漂亮起來?如何清理這個非常簡單的Rails函數?
def function
if new_record?
thing
else
thing + yet_another_thing
end
end
我不喜歡的thing
重複這裏,所以我不知道是否有一個更清潔的方式。
感謝您的任何幫助。
有沒有辦法讓這個Rails代碼漂亮起來?如何清理這個非常簡單的Rails函數?
def function
if new_record?
thing
else
thing + yet_another_thing
end
end
我不喜歡的thing
重複這裏,所以我不知道是否有一個更清潔的方式。
感謝您的任何幫助。
這適用於支持+任何對象, (甚至是字符串。)
[thing, (yet_another_thing unless new_record?)].compact.inject(:+)
它乾燥而可怕,就像被困在沒有水的沙漠中一樣。
您可能還能夠與閃避:
thing.dup.tap{|t| t << yet_another_thing unless new_record?}
如果事情是一個整數這是不行的(你不能DUP它),也需要支持< <運營商。
也幹,但以不同的方式嚇人。
同樣的模式工作正常字符串:只需更換'注入(:+)'和'join' – 2013-05-13 22:11:57
的注射用繩子工作爲好。 – 2013-05-13 22:13:04
如果你不想重複thing
,那麼這可能是一個解決方案。
def function
result = thing
result += yet_another_thing unless new_record?
result
end
你重複三次'result'而不是重複'thing'兩次。我認爲這沒有幫助。 – sawa 2013-05-13 21:46:49
如果_thing_是一個不平凡的表達式或函數調用,那麼它是一個有用的模式。 – 2013-05-13 22:09:14
你可以使用一個在線如果
def function
return thing if new_record?
thing + yet_another_thing
end
三元算子呢?
def function
new_record? ? thing : (thing + yet_another_thing)
end
如果我們知道你在哪裏使用它或者包含在變量中,這將會更有幫助。
如果事情和yet_another_thing一些方法你打電話:
def function
thing
yet_another_thing if new_record?
end
什麼是類'thing'? – sawa 2013-05-13 21:37:38
非常通用...... – Mindbreaker 2013-05-13 21:53:07
Ehm ...可能有thing.class調用的輸出嗎? – byterussian 2013-05-13 21:57:32