這是一本書的示例代碼。我認爲這是針對Ruby 1.8的。Ruby 1.9中的表達式不同?
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
我跑它的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"
我應該如何改變呢?
謝謝@tadman,我明白了。 – 2012-02-16 04:31:40
「1.8.x和1.9.x之間的語法發生了變化,現在不再允許: - 從不允許使用':'。它從未成爲Ruby官方語法的一部分。它從未被記錄。它被添加到MRI的解析器中,原因不明,因爲害怕解析器的改變可能會破壞某些東西,而Matz總是*非常清楚''''case'和'if'中的':'表達式是* not *語法的一部分,它*不能*被使用,並且它將在未來被從MRI分析器中移除,這是Koichi Sasada最終在YARV中完成的。 – 2012-02-16 13:31:37
我開始在1.8.x中非常虔誠地使用它們,因爲它們似乎是「標準」,即使是事實上的而非官方的。當1.9.x獲得支持時,這是一個粗魯的覺醒。至少我能夠製作一個Ruby正則表達式來修復當時破壞的代碼。 – tadman 2012-02-17 01:06:12