一行if语句不起作用
问题出现的原因是在这个案例中,使用了单行的if语句,但是语法有误。解决方法是将条件表达式括在圆括号中,并且在条件之后加上问号和冒号进行分隔,然后再写出两个可能的结果。如果条件为真,则返回第一个结果,否则返回第二个结果。此外,还可以使用unless关键字来实现相同的功能。
解决方法如下:
"Yes" if item.rigged else "No"
或者
"No" if not item.rigged else "Yes"
或者
"Yes" if item.rigged else "No"
这个解决方法不同之处在于,如果item.rigged为真,则返回nil而不是'Yes'。单行的if或者unless语句在条件不满足时会返回nil。
在Ruby中,if表达式的条件和then部分必须由表达式分隔符(即;或换行符)或者关键字then分开。所以,以下所有的写法都是正确的:
if .rigged then 'Yes' else 'No' end
if .rigged; 'Yes' else 'No' end
if .rigged
'Yes' else 'No' end
Ruby中也有条件运算符,但是这是完全不必要的。在C中,需要条件运算符是因为它是一个运算符:在C中,if是一个语句,因此无法返回一个值,所以如果想要返回一个值,就需要使用一个可以返回值的东西。而在C中,只有函数和运算符可以返回一个值,由于无法将if变成一个函数,所以需要使用一个运算符。
然而,在Ruby中,if是一个表达式。实际上,在Ruby中,一切都是表达式,所以它已经可以返回一个值。根本没有必要使用条件运算符,更不用说使用它了。
顺便说一下:习惯上,用于提问的方法的命名方式是在末尾加上一个问号,像这样:
.rigged?
这显示了在Ruby中使用条件运算符的另一个问题:
.rigged? ? 'Yes' : 'No'
这个写法很难阅读,因为多个问号太接近了。