一行if语句不起作用

7 浏览
0 Comments

一行if语句不起作用

我在考虑类似这样的写法:

if @item.rigged ? "Yes" : "No" 

但是它不起作用。Ruby 有 ||=,但我甚至不确定如何使用它。

0
0 Comments

问题出现的原因是在这个案例中,使用了单行的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。

0
0 Comments

在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'

这个写法很难阅读,因为多个问号太接近了。

0
0 Comments

问题:为什么一行的if语句不起作用?如何解决这个问题?

在给定的代码中,尝试从if .rigged ? "Yes" : "No"中移除if关键字。三元运算符的形式为condition ? if_true : if_false。如果条件以'?'结尾,是否可以省略它?也就是说,如果条件是.sales.present?,可以省略'?'吗?别担心,我找到了一些代码并进行了测试。答案是否定的。

你是正确的。Ruby语言非常擅长巧妙的技巧,但是它不是那么聪明。

解决方法:在条件表达式中,应该保留'?'符号。

0