1

我正在學習Sam Ruby的書「Agile Web Development With Rails」一書的Rails開發,當我調用模型的構造函數時出現語法錯誤。我已經找到了兩種使用替代語法來調用構造函數的方法,但我真的很想知道爲什麼本書中使用的語法在我的開發環境中不起作用。ruby​​(rails)的構造函數調用給出的語法錯誤

書中使用的語法,其中的鍵/值對通過類似於此括號包圍:

product = Product.new (title: "foo", description: "yyy") 

此代碼是在一個單元測試。當我運行 '耙測試:單位',我得到以下錯誤:

product = Product.new (title: "foo", description: "yyy") 

__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __^

ruby​​_book_demo /庫/測試/單位/ product_test.rb:16:語法錯誤,意想不到的TLabel

注意,我已經能夠獲得約於語法錯誤做:

product = Product.new title: "foo", description: "yyy" #WORKS 

product = Product.new ({title: "foo", description: "yyy"}) # WORKS! 

但我真的很想知道爲什麼我得到了錯誤。我使用JRuby:

的JRuby -v 的JRuby 1.6.7.2(紅寶石-1.9.2-P312)(2012-05-01 26e08ba)

感謝。

回答

5

你不能Product.new和括號之間的空間:

Product.new(title: 'foo', description: 'bar') 

它工作沒有括號的原因是因爲它們是可選的,並且需要在這種情況下的空間。

+0

它看起來像使用大括號時可以使用圓括號,但我不建議這樣做。不要使用括號或不要使用空格。 – 2012-07-19 16:44:33

+0

謝謝。它讓我感到恐怖,語法僵化,但是很好。 – robarson 2012-07-19 16:52:31

+1

我懷疑這是因爲parens也可能意味着分組表達式,就像'(1 + 3)'。隨着空間的存在,它認爲它是一個無鉛呼叫,然後內容應該是一個表達式,而不是一個參數列表。 – DGM 2012-07-19 21:52:35

相關問題