这两者有什么区别?
render plain: params[:article].inspect
render :plain params[:article].inspect
对于第二个语句,发生语法错误。这有什么不对?
此外,我试验了
在此处使用params[article:]
会导致语法错误。为什么我们必须在这里使用params[:article]
代替params[article:]
?
答案 0 :(得分:4)
在Ruby哈希语法中是key => value
,其中key可以是任何(几乎)对象,例如:
'my_key' => 1
:my_key => 2
'my_key'是一个字符串。 :my_key是一个符号。 Symbol语法是将冒号放在之前。
“符号后冒号”语法 - symbol: object
- 是:symbol => object
的语法糖。这意味着这一行:
:my_key => 2
与:
完全相同my_key: 2
您可以在我的文章Ruby for Admins: Hashes
中阅读相关内容答案 1 :(得分:1)
当您在Ruby 1.9上声明文字哈希时,plain:
用法是符号的有效快捷方式,如:
some_method(class: MyClass, name: 'register-me')
在声明命名参数时,它也是有效的,这是Ruby 2.1的新功能。你会这样做:
def some_method( key: 'some key' )
end
然后像这样称呼它:
some_method # assumes default value
some_method(key: "another key")
对于所有其他情况,符号仍然声明为:some_name
,您必须像这样声明它们。
答案 2 :(得分:0)
你的第二句话不起作用的原因是因为你错过了=>
:
render :plain => params[:article].inspect
所以这两个是等价的:
foo: "bar"
:foo => "bar"