您的所有三条线都功能相同。
哈希对象使用大括号{}
声明,Ruby开始使用火箭=>
配对键和值。所以当你将它传递给一个函数时声明一个将看起来像你的第一行。
create_widget(6, {:id => "table22", :class => "Cart"})
为了方便和简洁的语法,Ruby允许你省略{}
如果哈希是最后一个参数,它可以让你行2,这是很多接受某种额外的哈希选择方法常见的成语:
def create_widget(number, properties = {}); end
create_widget(6, :id => "table22", :class => "Cart")
Ruby 1.9的推出结肠:
语法来取代火箭=>
当你的密钥符号,导致线路3:
create_widget(6, id: "table22", class: "Cart")
所以在这些情况下,差异是纯粹的视觉效果。但请注意,如果您有非符号密钥,则需要使用火箭=>
语法。欢迎你到他们在相同的散列混合在一起:
create_widget(6, "id" => "table22", class: "Cart")
另外值得注意的是,红宝石2引入了关键字参数,这看起来与第3行关键字参数给你,除了订购灵活性描述性的名字人们摆脱了选择哈希。他们还让你更轻松地设置默认值比选项哈希,所以create_widget
看起来是这样的:
def create_widget(number, id:, class: "Cart")
id:
宣布,我们已经命名的参数id
,所以它需要它没有默认值。另一方面,class: "Cart"
将默认为"Cart"
,因此是可选的。现在所有这些调用都表现相同:
create_widget(6, id: "table22")
create_widget(6, id: "table22", class: "Cart")
create_widget(6, class: "Cart", id: "table22")
它们都以相同的方式解释,只是语法的变体。 – Anthony