我正在通过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
答案 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>'