ruby函数将字典指针作为参数,为什么?

时间:2015-06-19 05:00:07

标签: ruby pointers

def to_json(*opts)
  {
    'json_class'   => self.class.name,
    'data' => { 'term' => @term,
                'command' => @command,
                'client' => client
              }
  }.to_json(*opts)
end

为什么这个Ruby函数将字典指针*opts作为参数而不仅仅是opts?这有什么好处?

1 个答案:

答案 0 :(得分:3)

*中的星号*opts不是指针(如C / C ++中所示)。 Ruby中没有这样的指针概念。

定义方法时,它用于splatting。例如:

def foo(first, *rest)
  "first=#{first}. rest=#{rest.inspect}"
end

puts foo("1st", "2nd", "3rd")
# => first=1st. rest=["2nd", "3rd"]

调用方法时,它用于扩展参数。例如:

arr = ["2nd", "3rd"]
bar("1st", *arr)

相当于:

bar("1st", "2nd", "3rd")