如果变量存在于Ruby中,返回变量的方法较短?

时间:2010-11-05 06:39:19

标签: ruby

这是用Ruby编写的更短,更优雅,更干的方法吗?

if first_variable
   first_variable # return variable if it exists
else
   second_variable # otherwise, return something else
end

还是这个?

if first_variable
   first_variable.method_name 
else
   second_variable
end

3 个答案:

答案 0 :(得分:16)

你的两个例子在语义上是不同的,所以我只举一个例子。

return first_variable || second_variable

如果first_variable不是nil,那么第二个示例将返回方法调用的结果。这与你的第一个例子不同,所以我不明白比较它们。我也不明白你对DRY的使用。在任何一种情况下,你都不会重复自己。为什么if语句会这么烦你?这不是你应该担心的事情。

答案 1 :(得分:1)

Ruby还支持C:

中已知的三元运算
return first_variable ? first_variable.method_name : second_variable

另一种可能性是在一行上编写通常的“if”版本,感觉更像是自然语言:

return if first_variable then first_variable.method_name else second_variable end

答案 2 :(得分:0)

使用||是唯一使用基本Ruby进行DRY的语法。但这行不通:

  • 如果您要拒绝处于var1状态的真实状态,例如""
  • 如果您想保留var1处于虚假状态,例如false(与您的目的nil不同)

简而言之,如果您的目的是检查var1是否存在,您将不得不使用某种var1.check ? var1 : var2语法来重复自己 。 (check不是真正的方法,我用它来表示您要对它进行任何检查以确保它存在于您的应用程序中。)

我写的Demand宝石绕过了这个问题,并允许使用DRY语法:

return demand(var1, var2)

这将检查是否存在var1,如果存在则返回它。否则,它将返回var2