gpt4 book ai didi

ruby - Ruby 中使用的独立 splat 运算符 (*) 是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 07:44:49 27 4
gpt4 key购买 nike

我刚看到这个例子,其中 splat 运算符在方法定义中单独使用:

def print_pair(a,b,*)
puts "#{a} and #{b}"
end

print_pair(1,2,3,:cake,7)
#=> 1 and 2

很清楚在这样的上下文中使用什么以及为什么要使用它:

def arguments_and_opts(*args, opts)
puts "arguments: #{args} options: #{opts}"
end

arguments_and_opts(1,2,3, a: 5)
#=> arguments: [1, 2, 3] options: {:a=>5}

但是为什么以及如何在第一个示例中使用它?既然它是在 Ruby 规范中定义的,那么它一定有一个用例吗?

最佳答案

在参数列表中,*args 表示“吞噬数组中所有剩余的参数并将它们绑定(bind)到名为args 的参数”。 * 的意思是“吞噬所有剩余的参数并将它们绑定(bind)到任何东西”,或者更简单地说“忽略所有剩余的参数”。

这正是您要使用它的时候:当您想要忽略所有剩余的参数时。要么是因为您不关心他们,要么是因为不关心他们(但其他人可能):

def foo(*)
# do something
super
end

记住:没有参数列表的 super 会不加修改地传递参数。因此,即使 foothis 覆盖忽略了参数,它们仍然可用于父类(super class)的方法实现;然而,定义清楚地表明这个实现并不关心。

关于ruby - Ruby 中使用的独立 splat 运算符 (*) 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42158005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com