簡體   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