我正在尝试做
response = gets.chomp
response == "a" ? puts "yes" : puts "no"
终端提示:
syntax error, unexpected ':', expecting keyword_end
response == "a" ? puts "yes" : puts "no"
^
我究竟做错了什么?
最佳答案
这是你的错误:
response == "a" ? puts "yes" : puts "no"
#=> syntax error, unexpected ':', expecting end-of-input
# response == "a" ? puts "yes" : puts "no"
# ^
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"
# ^
(
response == "a" ? puts("yes") : puts "no"
引发相同的异常。)我不知道为什么这不起作用。异常表示在第二个
do...end
之后需要一个块( {..}
或 puts
)或左括号(用于封闭参数)。 Kernel#puts 调用 $stdout.puts
。由于 $stdout
返回一个 IO
对象,然后会调用 IO#puts,但文档没有说明问题。也许读者可以提供一个解释。你可以这样写:
response == "a" ? (puts "yes") : (puts "no")
或者
response == "a" ? puts("yes") : puts("no")
或(最好,imo)
puts response == "a" ? "yes" : "no"
关于ruby if-else one-liner with "puts"不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32617761/