【发布时间】:2018-03-27 15:31:55
【问题描述】:
我使用的是 ruby 2.4.1 版本,无法找到语法错误的原因
a = 5
while(a>0) do
a.times do |i|
puts i
end
a = a-1
end
下面是回溯
2.4.1 :022 > a = 5
=> 5
2.4.1 :023 > while(a>0) do
2.4.1 :024 > a.times do |i|
2.4.1 :025 > puts i
2.4.1 :026?> end
SyntaxError: (irb):26: syntax error, unexpected end-of-input, expecting keyword_end
from /usr/share/rvm/rubies/ruby-2.4.1/bin/irb:11:in `<main>'
2.4.1 :027 > a = a-1
=> 4
2.4.1 :028 > end
SyntaxError: (irb):28: syntax error, unexpected keyword_end
from /usr/share/rvm/rubies/ruby-2.4.1/bin/irb:11:in `<main>'
当我在 while 循环之后写一些像 puts 语句这样的东西时,它就可以工作了。为什么会出现这个语法错误?
【问题讨论】:
-
为我工作:耸耸肩:
-
复制粘贴错误。
-
代码在语法上很好。问题似乎来自 irb 以及它如何逐行处理代码输入。如下图,pry 处理得很好。
-
这真是一个有趣的问题,我以前没有遇到过,我注意到不仅
times而且(0..a).each do end也不起作用,只嵌套@987654327 @ 在 irb 上工作,为了使上面的示例正常工作,我将块的语法从do ... end更改为{..},我没有要添加到 @SergioTulentsev cmets 因为它似乎是迄今为止最正确的答案,我发现this 这似乎是一个已知问题,您应该使用;来解决它。 -
请注意,如果您将(可选)
do与while放在一起,即使在 IRB 中也可以使用
标签: ruby