Ruby语言的展开(Splat)运算符

1.用于变量赋值

展开运算符 * 支持任何实现了 to_a() 方法的对象。

#数组
#注意:星号*可以被省略。
a, b, c = *[1, 2, 3]
a, b, c = [1, 2, 3]

#注意:星号*不可以被省略。
a, b, c = 1, *[2, 3]

p a, b, c  # 1 2 3
#哈希
a, b, c = *{a:1, b: 2, c: 3}
p a, b, c  # [:a, 1] [:b, 2] [:c, 3]
#集合
a, b, c = *Set[1, 2, 3]
p a, b, c  # 1 2 3
#范围
a, b, c = *1..3
p a, b, c  # 1 2 3

2.用于方法实参

展开运算符 * 支持任何实现了 to_a() 方法的对象。

展开运算符 ** 支持任何实现了 to_hash() 方法的对象。

#数组
def f(a, b, c)
  p a, b, c
end

#注意:星号*不可以被省略。
f(*[1, 2, 3])  # 1 2 3

#注意:星号*不可以被省略。
f(1, *[2, 3])  # 1 2 3
#哈希
def f(a:, b:, c:)
  p a, b, c
end

h = {a: 1, b: 2, c: 3}
f(**h)  # 1 2 3
#集合
def f(a, b, c)
  p a, b, c
end

f(*Set[1, 2, 3])  # 1 2 3
#范围
def f(a, b, c)
  p a, b, c
end

f(*1..3)  # 1 2 3

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/rubyexp/37522.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2025年5月13日 18:02
下一篇 2025年5月13日 22:00

相关推荐

发表回复

登录后才能评论