Rya*_*ony 73 ruby conditional operators conditional-operator
是否有一个红宝石成语"If do-this"和"do-this"就像一个简单的命令一样?
例如,我现在正在做
object.method ? a.action : nil
Run Code Online (Sandbox Code Playgroud)
将else子句留空,但我觉得这可能是一种更惯用的方法,不需要在最后指定一个nil.(另外,在这种情况下,我觉得占用多行代码会很浪费.
Jör*_*tag 136
作为一般规则:你几乎不需要Ruby中的三元运算符.你在C中需要它的原因是因为在C中if
是一个语句,所以如果你想返回一个值,你必须使用三元运算符,这是一个表达式.
在Ruby中,一切是一个表达式,也都没有报表,这使得三元操作几乎是多余的.你总是可以替换
cond ? then_branch : else_branch
Run Code Online (Sandbox Code Playgroud)
同
if cond then then_branch else else_branch end
Run Code Online (Sandbox Code Playgroud)
所以,在你的例子中:
object.method ? a.action : nil
Run Code Online (Sandbox Code Playgroud)
相当于
if object.method then a.action end
Run Code Online (Sandbox Code Playgroud)
正如@Greg Campbell指出的那样反过来相当于尾随if
修饰符形式
a.action if object.method
Run Code Online (Sandbox Code Playgroud)
此外,由于Ruby中的布尔运算符不仅仅返回true
或者false
,而是最后一个计算表达式的值,您可以将它们用于控制流.这是从Perl导入的习语,看起来像这样:
object.method and a.action
Run Code Online (Sandbox Code Playgroud)
Dig*_*oss 16
Greg的答案是最好的,但是对于记录,甚至比在C中更多,表达式和语句在Ruby中是等价的,所以除了a.action if o.m?
你还可以做以下事情:
object.method? && a.action
Run Code Online (Sandbox Code Playgroud)
你可以写(a; b; c) if d
甚至
(a
b
c
) if d
Run Code Online (Sandbox Code Playgroud)
或者就此而言: (x; y; z) ? (a; b c) : (d; e; f)
在Ruby中没有允许只允许单个语句或表达式的情况......