【问题标题】:Ruby Beginner- unexpected end-of-input, expecting keyword_endRuby Beginner-意外的输入结束,期待keyword_end
【发布时间】:2016-06-03 19:08:12
【问题描述】:

我是 ruby​​ 的超级新手,我正在尝试按照有关如何构建矩形的说明进行操作。我正在尽可能仔细地跟踪,我三次检查我是否输入正确。我什至重新输入了它。问题似乎到了最后。我的终端一直给我错误:shapes.rb:25: syntax error, unexpected end-of-input, expecting keyword_end

谁能帮帮我?我认为这可能是 1.upto 的问题,但我不确定。非常感谢!!

    puts "Welcome to Shapes"
    print "How big do you want your shape? "
    shape_size = gets
    shape_size = shape_size.chomp
    print "Outside letter: "
    outside_letter = gets
    outside_letter = outside_letter.chomp
    print " Inside Letter: "
    inside_letter = gets
    inside_letter = inside_letter.chomp
    puts "About to draw a shape #{shape_size} big"
    puts "using #{outside_letter} for the edge"
    puts "and #{inside_letter} for the inside"
    width = shape_size
    height=shape_size
    1.upto(height) do |row|
    if row==1
        puts outside_letter * width
    elsif row==height
        puts outside_letter * width
    else
        middle= inside_letter * (width-2)
    puts
        "#{outside_letter}#{middle}#{outside_letter}"
    end

【问题讨论】:

  • 您缺少enddo
  • 在编程时您必须非常密切注意的第一件事是缩进。在这里您看不到问题,因为您没有正确缩进块。
  • 我强烈推荐阅读catb.org/esr/faqs/smart-questions.html。我们不在乎您是否是新手,我们希望您进行研究,投入大量精力来解决问题,然后提出一个经过深思熟虑的问题。请参阅“How to Ask”,它也链接到上述链接。如果您的代码有问题,请另外阅读“minimal reproducible example”。如果您保持代码缩进,则更容易查看是否存在缺少块结尾或} 的问题,并且不会询问由语法错误引起的问题。
  • 铁皮人,请不要无礼。我在一本书中跟随,这就是它的显示方式。我不知道还有其他人这样做,所以我去了一个论坛。如果您不想花时间回答我的问题,或者因为提出的问题而生气,请不要回答。就这么简单。
  • @brianslattery 感谢您花时间解释一些事情。我很感激!

标签: ruby-on-rails ruby


【解决方案1】:

你还需要一个end

puts "Welcome to Shapes"
print "How big do you want your shape? "
shape_size = gets
shape_size = shape_size.chomp
print "Outside letter: "
outside_letter = gets
outside_letter = outside_letter.chomp
print " Inside Letter: "
inside_letter = gets
inside_letter = inside_letter.chomp
puts "About to draw a shape #{shape_size} big"
puts "using #{outside_letter} for the edge"
puts "and #{inside_letter} for the inside"
width = shape_size
height=shape_size
1.upto(height) do |row|
  if row==1
    puts outside_letter * width
  elsif row==height
    puts outside_letter * width
  else
    middle= inside_letter * (width-2)
    puts
    "#{outside_letter}#{middle}#{outside_letter}"
  end
end # <--- here

既然你在这里学习,我觉得有必要添加更多细节:

当您有一个块时,例如代码中的1.upto(height) do |row|,它总是需要一个end,因为它是一个块(把它想象成一个代码单元)。在该块中,您正在为可枚举(例如数组)中的每个项目执行代码。在这种情况下,您的可枚举是一个介于 1 和 height 值之间的每个整数的数组:

2.3.0 :005 > 1.upto(4) do |number|
2.3.0 :006 >     puts "The number is: #{number}"
2.3.0 :007?>   end
The number is: 1
The number is: 2
The number is: 3
The number is: 4

【讨论】:

  • 请避免插入“编辑”或“更新”。我们有一个修订历史,我们可以检查我们是否需要查看什么时候发生了变化,这也告诉我们发生了什么变化。而是将更改添加到原来的位置。 meta.stackexchange.com/a/127655/153968 解释的很好。
【解决方案2】:

第 1 步:修复缩进 要解决此问题,请先修复缩进。这通常会使缺少结尾的地方变得明显。您可以在运行 ruby​​ 程序时使用警告标志来查看缩进关闭的位置:例如ruby -w my_program.rb.

第 2 步:解读警告 查看警告指向的行号。从这些中,您也许能够找出您的目标缺失的地方。如果没有,请转到下一步。

第 3 步:隔离导致错误的代码 如果由于警告而无法确定问题出在哪里,请尝试注释掉代码块并查看是否可以让程序运行。然后取消注释并逐块运行您的代码,直到错误返回。使用这种方法,您将能够找出您的目标缺失的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多