Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 这些语法之间有什么区别?_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 这些语法之间有什么区别?

Ruby on rails 这些语法之间有什么区别?,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,验证模型属性时,这两行之间有什么区别 validates :last_name, :length => { :maximum => 32 } validates :last_name, length: { maximum: 32 } 第一个使用:attribute=>,第二个使用attribute:两者之间的区别在于定义键/值对散列的语法。这取决于您使用的Ruby版本 第一个在Ruby 1.8和1.9+中都受支持: :key => :value 第二个仅在Ruby 1.9

验证模型属性时,这两行之间有什么区别

validates :last_name, :length => { :maximum => 32 }

validates :last_name, length: { maximum: 32 }

第一个使用
:attribute=>
,第二个使用
attribute:

两者之间的区别在于定义键/值对散列的语法。这取决于您使用的Ruby版本

第一个在Ruby 1.8和1.9+中都受支持:

:key => :value
第二个仅在Ruby 1.9+中受支持:

key: :value
如果您使用的是Ruby1.9,您可能应该使用后者,因为它似乎是社区中的首选方式。我个人也认为它的代码更干净

不过有一点不同。如果密钥是字符串,则不能使用后者,除非您使用的是Ruby 2.2。这只适用于Ruby 2.2+:

{ 'key': :value }
要在Ruby 2.2以下版本中使用字符串作为键,必须使用“哈希火箭”:

{ :'key' => 'value }

没有区别,

{ symbol_key: value }
只是看起来比我干净

{ :symbol_key => value }
对于字符串键,仍然需要使用“火箭”来声明键的值,如下所示:

{ "string_key" => value }
事实上,如果打开ruby控制台并键入

{ symbol_key: "value" }

它输出
{:symbol\u key=>“value”}
建议将
{symbol\u key:“value”}
转换为火箭语法,它只是为了看起来更好。

第二种是从Ruby版本1.9开始表示哈希值的新方法。您显示的两个示例的行为应该相同。旧方法(您的第一种)似乎没有被弃用,因此两者都可以使用。编辑:刚刚清理了答案的格式