2012-08-03 17 views

回答

7

這似乎是IRB解析器中的錯誤。如果你嘗試在撬,或在命令行或文件中它工作得很好:

ruby -e"res = [1, 2, 3].reduce :+ 
p res" 
# 6 

基本上,IRB會很困惑,認爲+是一個二元運算符,並等待第二個操作數。

+0

+1我不知道Pry有這樣的事情。另外,我沒想過要從文件中檢查它。謝謝! – cyang 2012-08-03 00:44:10

+0

注:我原本有'res = [1,2,3] .reduce:+;作爲一個例子,但事實證明,IRB可以處理得很好。它需要換行符來觸發錯誤。 – 2012-08-03 00:44:39

+0

我曾嘗試過'res = [1,2,3] .reduce:+;',但它只是給了'?>'提示。之後我沒有想過嘗試輸入'p res'。 – cyang 2012-08-03 00:46:57

0

這似乎是Ruby解析器無法處理該特定的組合。符號有限制,但是:+等是某種特殊情況,顯然需要正確解釋括號。如果

通知你嘗試自行評估:+它不分析。像:*:/這樣的其他運營商也是如此,所以這裏有一些「神奇」的事情發生。

+3

Ruby的解析器可以很好地處理這個問題。問題是IRb的解析器,它基本上是一個「Regexp」風管的大雜燴,用來解析希望但不完全類似於Ruby語言的東西。 Pry使用YARV,JRuby或Rubinius的內置解析器,這從定義上來說總是正確的。 – 2012-08-03 00:40:30

+0

這將是一個更合理的解釋。我從來沒有見過Ruby解釋器出現過irb的情況,但之後,我很喜歡括號。 – tadman 2012-08-03 00:59:48

相關問題