gpt4 book ai didi

ruby - 在 Hash#fetch ruby​​ 中使用 lambda 作为默认值

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:46 24 4
gpt4 key购买 nike

我正在通读自信的 ruby​​,我正在尝试如何定义可重用的过程。根据给出的示例,我这样写:

DEFAULT_BLOCK = -> { 'block executed' }

answers = {}

answers.fetch(:x, &DEFAULT_BLOCK)

我期待它返回 block executed 因为在 Hash 中找不到 x 但它返回了 错误数量的参数(给定 1,预期 0 ) (参数错误)。可能是什么问题?我没有给 block 一个参数。

最佳答案

你有,你只是没有看到:

WHAT_AM_I_PASSING = ->(var) { var.inspect }

answers = {}

answers.fetch(:x, &WHAT_AM_I_PASSING)
# => ":x"

Hash#fetch block 提供了一个参数,即您尚未找到的键。你可以在你的 lambda 中接受一个参数并忽略它,或者让它成为一个过程:

DEFAULT_BLOCK = proc { 'block executed' }
answers.fetch(:x, &DEFAULT_BLOCK)
# => "block executed"

proc 起作用的原因是 lambda 验证是否提供了正确数量的参数,而 proc 则没有。 fetch 方法使用一个参数( key )调用 proc/lambda。

关于ruby - 在 Hash#fetch ruby​​ 中使用 lambda 作为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54549805/

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