起因是由于在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 仍是一个可变数组序列,不过这么写,会给阅读造成障碍,不推荐这么做。