3
爲什麼給出ruby18此代碼,並ruby19語法錯誤:爲什麼`a(b.c do; end)`不是一個語法正確的Ruby程序?
a (b.c do;end)
我本來期望它意味着以下。用一個參數調用方法a
。空格後面的括號不是方法參數括號,但只有像您這樣的正常括號幾乎可以放在任何地方。參數是對象b
上方塊c
的調用返回值。
但是,下列所有內容都被ruby18解釋爲語法正確。只有這些例子中的第一個被ruby19視爲語法錯誤。
a (b do;end)
和:
a (b.c {})
和:
(b.c do;end)
我知道,這些括號之後的空格不是正常的方法括號。我的直覺說,它仍然應該是句法上有效的。爲什麼不是? – johannes 2012-01-04 13:57:48
顯然,這是因爲馬茨的大腦:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/84104?help-en – 2012-01-04 14:28:44
@Frederick Cheung:空間之所以正在產生一個警告是因爲在那一點上語法是*模棱兩可的。它可能是方法調用或第一個參數的括號,兩者都是可能的,Matz無法找到解決衝突的解決方案。它仍然不能解釋爲什麼'a(b.c do; end)'是一個*語法錯誤*。 – DarkDust 2012-01-04 18:15:03