![](/img/trans.png)
[英]no such file to load — rails/cli under Ruby Enterprise Edition 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-builders?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'] }
哈希语法在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.