如何清理这个非常简单的Rails函数?

时间:2013-05-13 21:33:19

标签: ruby

有没有办法搞砸这个Rails代码?

def function
  if new_record?                      
    thing
  else
    thing + yet_another_thing
  end
end

我不喜欢在这里重复thing,所以我想知道是否有更清洁的方式。

感谢您的帮助。

6 个答案:

答案 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)

如果thingyet_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