这是用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
答案 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
。