Ruby哈希的括号语法

Ruby哈希的括号语法,ruby,syntax,hash,Ruby,Syntax,Hash,这两条语句是否将相同类型的参数(散列)传递给新方法 @seat = Seat.new(:flight_id => @flight.id) @seat = Seat.new({:flight_id => @flight.id}) 散列括号{}在第二个例子中有什么变化吗?它们都是相同的,{}在第二个参数中没有添加任何内容,只是使事情比以前更加明确(使用=>语法就足以对任何使用ruby的人说“这是一个散列”,不管时间长短) Ruby将自动打开一系列参数,如: someFunction(

这两条语句是否将相同类型的参数(散列)传递给新方法

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

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

散列括号{}在第二个例子中有什么变化吗?

它们都是相同的,{}在第二个参数中没有添加任何内容,只是使事情比以前更加明确(使用=>语法就足以对任何使用ruby的人说“这是一个散列”,不管时间长短)

Ruby将自动打开一系列参数,如:

someFunction(:arg1 => value1, :arg2 => value2)
并将其作为单个参数传递给您。需要在哈希周围添加{}的时间是当您有哈希的哈希或需要两个哈希的函数时(例如,当您需要同时传递选项和html_选项时,有几个rails方法),如下所示:

someFunction({:arg1 => value1, :arg2 => value2}, {:arg3 => value3})
它将在两个散列中传递(如果任由解释器自行处理,解释器将无法推断这两个散列在何处被拆分,因此您需要给它{}来告诉它在这种情况下应该做什么)


更多信息可在Pickaxe book的章节中找到:在底部关于收集散列参数的章节中。

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

我通常不会在标准代码中使用逗号语法——就像workmad3所说的那样,箭头(=>)使散列更加明显。但在交互式Ruby会话(irb)中,键入逗号比键入箭头更容易:

{:eyes, "blue", :height, 6.2}  # => {:height=>6.2, :eyes=>"blue"}
在Ruby 1.9中,惯用版本的逗号更少:

{eyes: "blue", height: 6.2}

是的,还记得第二个例子中的语法在所有可行的ruby版本中都被删除了(1.8即将下线)
{eyes: "blue", height: 6.2}