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

相关问题