gpt4 book ai didi

ruby - Array#first 的 block 参数有什么作用?

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

我的内存力最差,我忘记了 Array#find

所以我写了一些代码,使用 Array#first 来获取第一个符合条件的项目:

first_even_num = [1,2,3].first { |x| x % 2 == 0 }

这行不通,无论条件如何,它都只返回数组的第一个元素。该 block 根本没有被调用:

[1,2,3].first { |x| exit }
puts "the program did not exit"

我已经接受了 Array#first 没有按照想象的那样做,但我很好奇为什么上述示例不会引发错误。

查看 2.3.1 source,唯一记录的参数是一个整数,表示返回结果的数量。

我不太了解 C,但这是底层 Array#first 方法的参数签名:

rb_ary_first(int argc, VALUE *argv, VALUE ary)

我只是想知道为什么提供给 Array#first 的 block 在什么都不做的情况下不会引发错误。

最佳答案

您可以将 block 传递给任何方法,绝对是任何方法。如果它不需要这个 block ,它就不会使用它。这不是错误(因为 block 不是参数之一。它是方法的单独输入)

关于ruby - Array#first 的 block 参数有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39476169/

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