【问题标题】:Ruby SyntaxError: unexpected end-of-input, expecting keyword_end [closed]Ruby SyntaxError:意外的输入结束,期待keyword_end [关闭]
【发布时间】: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 这似乎是一个已知问题,您应该使用 ; 来解决它。
  • 请注意,如果您将(可选)dowhile 放在一起,即使在 IRB 中也可以使用

标签: ruby


【解决方案1】:

问题将通过在 do 语句前添加 ; 得到解决

while(a>0) do;

或者你可以跳过可选的do as

a = 5
while(a>0)
  a.times do |i|
    puts i
  end
  a = a-1 
end

【讨论】:

  • 没关系,但仍然困惑为什么当我们在 do 语句之后传递一些其他东西时它会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多