我试着在一段时间内有一个块并在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
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
但是你要从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
}
Run Code Online (Sandbox Code Playgroud)
如果你真的需要一个块中的代码,你可以创建一个然后调用它,就像这样(仅限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
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这是一个更清洁的版本:
(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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |