仅打印阵列中的偶数

时间:2015-10-22 15:13:09

标签: ruby

我正在通过Ruby教程工作。其中一个问题提供了一个数组。然后你必须:

  

"写一个只放置my_array偶数值的循环。 (如果你使用一行if,可以获得奖励积分!)"

我的回答通过了测试,但显示了语法错误,我的回答是下面的if语句。有人可以解释为什么我会收到语法错误吗?

my_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

if my_array.each do |x| % 2 == 0 puts X

4 个答案:

答案 0 :(得分:5)

您错过了end的{​​{1}}语句和模数的左操作数。试试这个:

do

答案 1 :(得分:4)

在每次迭代中都没有必要调用arr = *(1..10) puts a.select(&:even?) #=> [2, 4, 6, 8, 10] 。这样做很好:

arr = *(1..10)
puts a.select(&:even?).join(", ")
#=> 2, 4, 6, 8, 10

或者,如果您希望将结果连接为字符串:

{{1}}

答案 2 :(得分:0)

你需要编写这样的代码

my_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
my_array.each do |x| 
  if x % 2 == 0 
    puts x 
  end
end

1行版

my_array.each{|x| puts x if x%2 == 0}

答案 3 :(得分:0)

自己在irb做这些事情并逐行完成。

> irb(main):001:0> arr = [1,2,3]
> => [1, 2, 3]
> 
> irb(main):018:0> arr.each { |x| x }
> => [1, 2, 3]
> 
> irb(main):019:0> someVar = arr.each { |x| x }
> => [1, 2, 3]
> 
> irb(main):021:0> someVar % 2

正如您所看到的,您正在尝试对不可能的数组进行模数化。你在if语句中这样做。 if {lhs} % {rhs}左侧是阵列&右边是2.如果我们模拟这种行为,我们得到与上面相同的输出

irb(main):022:0> if someVar % 2
irb(main):023:1> puts x
irb(main):024:1> end
NoMethodError: undefined method `%' for [1, 2, 3]:Array
    from (irb):22
    from /usr/bin/irb:12:in `<main>'