我们应该创建一个数组,并且仅puts
个偶数。这是我的错误代码:
my_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
my_array.each { |num| num % 2 == 0 ? puts num }
它会引发此错误:
(ruby):1: syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('
my_array.each { |num| num % 2 == 0 ? puts num }
正确的功能代码:
my_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
my_array.each { |num| puts num unless num % 2 != 0 }
我想知道为什么我编写的代码无法运行,即使我知道如何编写有效的版本。问题是否源于我的单行puts num
语句的条件部分中有if
?
答案 0 :(得分:4)
此语法:
my_array.each { |num| num % 2 == 0 ? puts num }
此示例中的?
是三元运算符的一半,基本上是if .. else .. end
语句的简写。
您的代码存在问题,就是您丢失了一半,而且它并不真正适用于您的确切结构。
要使其正常工作,它需要看起来类似于以下内容:
my_array.each { |num| (num % 2).zero? ? (puts num) : next }
您需要添加语句的else
边,该边在冒号之后。在您的示例中使用的语法可能不是理想的语法,但是可以与next
语句一起使用,在这种情况下,该语句什么也不做,只是让控制流继续进行下一次迭代。
Here是SO的好答案,它描述了如何在Ruby中使用三元运算符。
答案 1 :(得分:3)