我正在尝试在一段时间内使用一个块并在Ruby中开始语句,但是我收到语法错误。还有其他任何方式来实现吗?
这就是我想要完成的事情
(1..limit).each { |i|
while (true) do |n|
x = n * (i%n)
puts n if n%i != 0
break if x.even? && !x.zero?
n += 1
end
}
答案 0 :(得分:6)
while
是一个关键字,因此您不需要该块。你的代码应该是:
(1..limit).each { |i|
while (true)
x = n * (i%n)
puts n if n%i != 0
break if x.even? && !x.zero?
n += 1
end
}
但是你要从while
语句请求一个块变量。管道内的变量名称用于传递给块的变量,其中包含来自块的任何调用的信息。我将假设n
应该增加。这是一个工作版本:
(1..limit).each { |i|
n = 0
while (true)
x = n * (i%n)
puts n if n%i != 0
break if x.even? && !x.zero?
n += 1
end
}
如果你真的需要一个块中的代码,你可以创建一个然后调用它,就像这样(仅限ruby 1.9):
(1..limit).each { |i|
n = 0
while (true)
-> do
x = n * (i%n)
puts n if n%i != 0
break if x.even? && !x.zero?
n += 1
end.()
end
}
顺便说一下,这是一个更清洁的版本:
(1..limit).each do |i|
n = 0
loop do
x = n * (i % n)
puts n if n % i != 0
break if x.even? and !x.zero?
n += 1
end
end