Ruby Hashes的括号语法

时间:2009-05-27 07:38:41

标签: ruby syntax hash

这两个语句是否将相同类型的参数(哈希)传递给新方法?

@seat = Seat.new(:flight_id => @flight.id)

@seat = Seat.new({:flight_id => @flight.id})

哈希方括号{}是否会改变第二个例子中的任何内容?

2 个答案:

答案 0 :(得分:12)

它们都是相同的,{}在第二个参数中没有添加任何内容,除了使事情比现在更明确(使用=>语法足以说'这是一个哈希'给任何人使用红宝石任何时间长度。)

Ruby将自动转换参数列表,如:

someFunction(:arg1 => value1, :arg2 => value2)

进入哈希并将其作为单个参数传递给您。你需要在哈希周围添加{}的时候是你有哈希哈希值或者需要两个哈希值的函数(比如你需要传递两个选项和html_options时的几个rails方法),比如:

someFunction({:arg1 => value1, :arg2 => value2}, {:arg3 => value3})

将传入两个哈希值(如果留给自己,解释器将无法推断出2个哈希值被拆分的位置,所以你需要给它{}告诉它在这种情况下该做什么)< / p>

更多信息可在Pickaxe书籍章节中找到:More About Methods在底部收集哈希参数部分。

答案 1 :(得分:1)

这似乎是提及另一种替代语法的好地方,使用逗号分隔大括号内的项目(使用您的示例):

@seat = Seat.new({:flight_id, @flight.id})

我通常不会在标准代码中使用逗号语法 - 就像workmad3说的那样,箭头(=&gt;)使哈希变得更加明显。但是在交互式Ruby会话(irb)中,输入逗号比箭头更容易:

{:eyes, "blue", :height, 6.2}  # => {:height=>6.2, :eyes=>"blue"}

在Ruby 1.9中,惯用版的逗号更少:

{eyes: "blue", height: 6.2}