这是一本书中的示例代码.我认为它适用于Ruby 1.8.
birthyear = 1986
generation = case birthyear
when 1946...1963: "Baby boomer"
when 1964...1976: "Generation X"
when 1977...2012: "new generation"
else nil
end
puts generation
Run Code Online (Sandbox Code Playgroud)
我在Ruby 1.9上运行它,并收到此错误消息:
Untitled 2.rb:12: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n'
when 1946...1963: "Baby boomer"
^
Untitled 2.rb:13: syntax error, unexpected keyword_when, expecting $end
when 1964...1976: "Generation X"
Run Code Online (Sandbox Code Playgroud)
我应该怎么改变这个?
tad*_*man 39
1.8.x和1.9.x之间的语法发生了变化,:现在不再允许:
birthyear = 1986
generation = case birthyear
when 1946...1963
"Baby boomer"
when 1964...1976
"Generation X"
when 1977...2012
"new generation"
else
nil
end
puts generation
Run Code Online (Sandbox Code Playgroud)
技术上:已被替换为then但如果您使用换行符,那么这是一个可选关键字.去跟踪你使用旧语法的情况有点麻烦,所以希望搜索case足够接近.
win*_*ons 11
根据PickAxe的第3版,它是故意的.
第125页,案例表达:
"Ruby 1.8允许您使用冒号字符代替
then关键字.这不再受支持."
例如,有then没有换行符:
birthyear = 1986
generation = case birthyear
when 1946...1963 then "Baby boomer"
when 1964...1976 then "Generation X"
when 1977...2012 then "new generation"
else nil
end
puts generation
Run Code Online (Sandbox Code Playgroud)