仅显示数组的偶数

时间:2018-07-12 22:43:23

标签: ruby

我们应该创建一个数组,并且仅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

2 个答案:

答案 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)

您可以使用 Integer#even?

> my_array.each { |i| puts i if i.even?}

OR

> puts *my_array.select(&:even?)