繁体   English   中英

为什么这在Ruby 1.9.3下而不在1.8.7下工作?

[英]Why does this work under Ruby 1.9.3 and not under 1.8.7?

我正在Rails中构建一个自定义的Form Builder,并且一直在关注这个出色的Rails Cast视频( http://railscasts.com/episodes/311-form-b​​uilders?view=asciicast )。

瑞安使用这样的一行:

<%= form_for @project, builder: BootstrapFormBuilder do |f| %>

但是在1.8.7下,这会发出带有错误消息的炸弹。

Ruby 1.9.3中进行了哪些更改,现在可以正常工作了?

顺便说一句,下面在1.8.7工作,但为什么呢?

<%= form_for(@project, :builder => BootstrapFormBuilder) do |f| %>

Ruby 1.9.3中进行了哪些更改,现在可以正常工作了?

Hash文字有一种新语法,其键是Symbol ,它们是有效的标识符。 代替

{ :foo => 'bar', :baz => 42 }

您现在也可以写

{ foo: 'bar', baz: 42 }

此语法在1.9.0中引入。

顺便说一句,以下内容在1.8.7中有效,但是为什么呢?

因为那是同一件事,所以只是使用不同的语法编写。

哈希语法已得到扩展,允许用户使用类似JavaScript的样式。

# Old syntax
old_hash = { :name => 'Ruby', :influences => ['Perl', 'Python', 'Smalltalk'] }

# New syntax (Ruby 1.9 only)
new_hash = { name: 'Ruby', influences: ['Perl', 'Python', 'Smalltalk'] }

http://peepcode.com/blog/2011/rip-ruby-hash-rocket-syntax

哈希语法在Ruby 1.9中进行了更改。 在所有版本的Ruby中,您都可以使用key => value ,但是Ruby 1.9有一个新的key: value语法。 这就是为什么您的第二个示例有效而第一个示例无效的原因。

由于这一部分:

builder: BootstrapFormBuilder

这会创建一个哈希,但是语法仅在Ruby 1.9+中允许。 之前,要创建哈希,您必须做

:builder => BootstrapFormBuilder

这就是第二行在1.8中起作用的原因。

Ruby 1.9引入了另一种哈希语法:

# Ruby 1.8 and 1.9
h = { :a => 1, :b => 2 }

# Ruby 1.9 only
h = { a: 1, b: 2 }

应当指出, a:只是:a =>的语法糖,即a仍然是一个符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM