Back

ruby - splat operator: star ruby 中的 *, **

发布时间: 2022-07-23 08:08:00

refer to: 
https://stackoverflow.com/questions/18289152/what-does-a-double-splat-operator-do

* : 叫做 splat operator

**:  double splat operator

single splat 用法1:

a, b = 1,2

a, b = *[1,2]

一样的。分别赋值

single splat 用法2: 作为方法的参数,该参数是一个value (注意不是hash)

def print_words(*words)
  words.each { |word| puts word }
end
print_words("one", "two", "three", "four")  
会打印所有的参数   =>  "one", "two", "three", "four"

表示:

该参数是个数组,可选,长度无限,不能一个方法的参数中出现两次。

double splat 用法: 作为方法的参数,该参数是一个hash , 可选

例如;

def foo(a, *b, **c)
  [a, b, c]
end

Here's a demo:

> foo 10
=> [10, [], {}]
> foo 10, 20, 30
=> [10, [20, 30], {}]
> foo 10, 20, 30, d: 40, e: 50
=> [10, [20, 30], {:d=>40, :e=>50}]
> foo 10, d: 40, e: 50
=> [10, [], {:d=>40, :e=>50}]

可以看出, *b 需要的是 数组  1,2,3 这样, **c 需要的是一个 hash  ,传入的时候都不需要最外侧的 [] 或者 {}

Back