关于Ruby的星号(*)

浏览:2516 发布日期:2016-10-12 13:48:16

关于Ruby的星号(*)

起因是由于在ActiveSupport源码中看到下面的代码:

def slice!(*keys)    keys = keys.map! { |key| convert_key(key) } if respond_to?              (:convert_key, true)
    omit = slice(*self.keys - keys)
    hash = slice(*keys)
    replace(hash)
    omit
  end

slice!方法接受可变长度参数,后来经过测试,数组前加*前缀,将会将一个数组变为一个可变参数序列。×keys仍是数组类型,但×keys传递给函数,我们得到的仍是一个数组,×self.keys - keys 仍是一个可变数组序列,不过这么写,会给阅读造成障碍,不推荐这么做。