我正在努力弄清楚/理解为什么会出现以下语法错误:
syntax error, unexpected tIDENTIFIER, expecting '}'
odds.each { |x| x = x * 2 puts x }
^
跑步时:
odds = [1,3,5,7,9]
odds.each { |x| x = x * 2 puts x }
这适用于打印和放置。但是在运行时:
odds.each do |x|
x = x * 2
puts x
end
我得到了我正在寻找的结果。因此,即使我能够在其他情况下使用,也不能在此示例中使用带有{}的print / puts。
答案 0 :(得分:2)
因此我不能在此示例中使用带有{}的print / puts
你可以。
odds.each { |x| x = x * 2; puts x }
↑
# 2
# 6
# 10
# 14
# 18
它与{}
无关,您只需要使用换行符或;
分隔两个语句。
答案 1 :(得分:0)
你的结论是错误的:
因此我不能在此示例中使用带有{}的print / puts
您的错误在于,在测试您的假设时,您会混淆几个变量。你应该确保当你想要测试一些东西时,只测试那件事而不是其他东西。
在这种特殊情况下,您的假设是"我不能将puts
与{
/ }
"一起使用。但是,当您测试它时,您可以更改两个事物:
do
/ end
更改为{
/ }
和现在你得到一个错误。但是,由于您一次更改了两件事,因此无法知道导致错误的两个更改中的哪一个。你认为这是第一次改变,但你无法知道。您唯一知道的是第一个或第二个或两个更改的组合导致错误。
您需要分别测试这两个更改:
原始代码:
odds.each do |x|
x = x * 2
puts x
end
# works
测试#1:
odds.each { |x|
x = x * 2
puts x
}
# works
测试21:
odds.each do |x| x = x * 2 puts x end
# SyntaxError
啊哈!所以,事实证明,毕竟它并非花括号!这是划线!