2015-09-27 45 views
0

ruby 1.8.7語法錯誤而不是當+ =

爲什麼這是確定:

string += method "value" 

但是,這提出一個語法錯誤:

string << method "remove reviewer" 

是一樣的更新版本的紅寶石的行爲?

+0

是的,在更高版本的Ruby中也是如此。 (我在Ruby 2.2上測試過) –

回答

1

您可以用不同的Operator Precedence<<=+和方法調用來解釋此行爲。

紅寶石讀取你的第一個例子是:

string += (method "value") 

,但第二個是:

(string << method) "remove reviewer" 

IMO是使用圓括號的方法調用,即使Ruby沒有需要他們一個很好的做法在許多情況下。這使得代碼更具可讀性並且更少出錯:

string += method("value") 
string << method("remove reviewer") 
1

是的,在更高版本的Ruby中也是如此。 (我在Ruby 2.2上測試過)。

這是因爲Ruby的operator precedence

要解決這個問題,你可以在使用的情況下的<<括號:

string << method("remove reviewer") 

然後,它應該工作,也就不會出現語法錯誤。

或者,使其保持一致,可以使用括號對他們倆的:

string += method("value") 
string << method("remove reviewer") 

逸岸,強烈建議使用括號()的方法調用,以避免這種情況就像一個你」再問一次。查詢this post瞭解更多信息。