我正在努力做到
response = gets.chomp
response == "a" ? puts "yes" : puts "no"
Run Code Online (Sandbox Code Playgroud)
终端抱怨:
syntax error, unexpected ':', expecting keyword_end
response == "a" ? puts "yes" : puts "no"
^
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
这是你的错误:
response == "a" ? puts "yes" : puts "no"
#=> syntax error, unexpected ':', expecting end-of-input
# response == "a" ? puts "yes" : puts "no"
# ^
Run Code Online (Sandbox Code Playgroud)
Ruby正在寻找第一个puts
'参数.由于它们没有括在括号中,因此她假设它们位于以逗号分隔的列表中puts
.第一个是"yes"
,但没有逗号"yes"
,所以引发了异常.
我们试试吧:
response == "a" ? (puts "yes") : puts "no"
#=> syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
# response == "a" ? (puts "yes") : puts "no"
# ^
Run Code Online (Sandbox Code Playgroud)
(response == "a" ? puts("yes") : puts "no"
引发同样的例外.)
我不知道为什么这不起作用.例外情况表明它在第二个之后期望一个块(do...end
或{..}
)或左括号(用于封闭参数)puts
.内核#调用$stdout.puts
.当$stdout
返回一个IO
对象时,IO#puts随后被调用,但该文档没有解决问题.也许读者可以提供解释.
您可以按如下方式编写它:
response == "a" ? (puts "yes") : (puts "no")
Run Code Online (Sandbox Code Playgroud)
要么
response == "a" ? puts("yes") : puts("no")
Run Code Online (Sandbox Code Playgroud)
或者(最好的,imo)
puts response == "a" ? "yes" : "no"
Run Code Online (Sandbox Code Playgroud)