使用哪个:foo和foo:

时间:2014-07-25 13:18:33

标签: ruby-on-rails ruby

这两者有什么区别?

  • render plain: params[:article].inspect
  • render :plain params[:article].inspect

对于第二个语句,发生语法错误。这有什么不对?

此外,我试验了

  • render plain:params [article:]。inspect`。

在此处使用params[article:]会导致语法错误。为什么我们必须在这里使用params[:article]代替params[article:]

3 个答案:

答案 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"