就像一个简单的命令一样,是否有红宝石成语用于“ If do-this”和“ do-this”?
例如,我目前正在做
object.method ? a.action : nil
将else子句留空,但我觉得可能有一种更惯用的方式,而不必在最后指定nil。(或者,我觉得在这种情况下占用多行代码会很浪费。
Answers:
作为一般规则:Ruby中几乎不需要三元运算符。之所以在C中需要它,是因为在C中它if
是一条语句,因此,如果要返回一个值,则必须使用三元运算符(即表达式)。
在Ruby中,一切是一个表达式,也都没有报表,这使得三元操作几乎是多余的。您随时可以更换
cond ? then_branch : else_branch
与
if cond then then_branch else else_branch end
因此,在您的示例中:
object.method ? a.action : nil
相当于
if object.method then a.action end
正如@Greg Campbell指出的那样,它等效于尾随if
修饰符形式
a.action if object.method
另外,由于Ruby中的布尔运算符不仅返回true
或false
,而是最后求值表达式的值,因此可以将它们用于控制流。这是从Perl导入的一个惯用法,看起来像这样:
object.method and a.action
cond ? a : b
比短if cond then a else b end
,仅此一项就让我用它来保存11个字符;-)
result = (<expression> && <true value>) || <false value>
value = 1
result = (value == 1 && 'one' ) || 'two'
result #=> 'one'
说明:value == 1 &&'one'#=>返回最后一个表达式结果,value等于1,因此将对段求值,并返回'one'。
value = 0
result = (value == 1 && 'one' ) || 'two'
result #=> 'two'
说明:value!= 1和'and'表达式将不被评估,但是instad将被使用'or'表达式并返回'two'