-5

Is there a way to pretty up this Rails code?

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

I don't like the repetition of thing here, so I wonder if there's a cleaner way.

Thanks for any help.

4

6 回答 6

3

这适用于任何支持 +, 的对象(甚至是字符串。)

 [thing, (yet_another_thing unless new_record?)].compact.inject(:+)

它干燥而可怕,就像被困在没有水的沙漠中。


您也许还可以摆脱:

 thing.dup.tap{|t| t << yet_another_thing unless new_record?}

如果 thing 是整数(你不能复制它),这将不起作用,并且它还需要支持 << 运算符。

也干燥但以不同的方式可怕。

于 2013-05-13T21:58:39.363 回答
1

三元运算符呢?

def function
  new_record? ? thing : (thing + yet_another_thing)
end

如果我们知道您在哪里使用它或变量中包含什么,这将更有帮助。

于 2013-05-13T21:58:48.350 回答
0

如果你可以使用内联

def function
  return thing if new_record?
  thing + yet_another_thing
end
于 2013-05-13T21:50:11.997 回答
0

如果thingyet_another_thing是字符串,你可以这样做:

thing + (yet_another_thing unless new_record?).to_s
于 2013-05-13T21:50:43.280 回答
0

如果您不想重复thing,那么这可能是一个解决方案。

def function
  result = thing
  result += yet_another_thing unless new_record?
  result
end
于 2013-05-13T21:44:59.077 回答
0

如果 thing 和 yet_another_thing 是您正在调用的方法:

def function
  thing
  yet_another_thing if new_record?
end
于 2013-05-13T23:36:50.480 回答