gpt4 book ai didi

ruby - 动态解构 Ruby block 参数

转载 作者:数据小太阳 更新时间:2023-10-29 08:21:21 25 4
gpt4 key购买 nike

近期好货article关于 ruby​​ 的解构将解构定义为将一组变量绑定(bind)到一组相应的值的能力,在任何地方你通常可以将一个值绑定(bind)到一个变量,并给出了一个 block 解构的例子

triples = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

triples.each { |(first, second, third)| puts second } =>#[2, 5, 8]

在这种情况下,我们知道主数组中元素的数量,因此当我们提供参数 first、second、third 时,我们可以获得相应的结果。那么,如果我们有一个大小在运行时确定的数组呢?

triples = [[1, 2, 3], [4, 5, 6], [7, 8, 9],...,[]]

我们想要获取每个子数组的第一个条目的元素?

triples.each { |(first, second, third,...,n)| puts first }

动态创建局部变量(first, second, third,...,n) 的最佳方法是什么?

最佳答案

在您的特定情况下,您将使用 splat 收集除第一个值以外的所有内容:

triples.each { |first, *rest| puts first }
#-----------------------^splat

*rest 符号只是将剩下的所有内容收集到一个名为 rest 的数组中。

一般来说,创建任意数量的局部变量(second, third, ..., nth)没有多大意义,因为您无法对它们做任何事情;您可能会搞出一堆恶心的 eval,但我们已经有了一个功能完善的 Array 类,所以何必呢?

关于ruby - 动态解构 Ruby block 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7036707/

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