gpt4 book ai didi

ruby - 测试 block 执行的 ruby​​ yield 方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:05:55 25 4
gpt4 key购买 nike

每当我将一个 block 传递给 Ruby 中的 yield 方法时,我想知道该 block 是否实际执行了。例如:

def yield_method(list)
list.each do |item|
yield item
end
end

yield_method(ARGV) { |item|
print item
}

print "executed"

我愿意为

print "executed"

仅当传递给 yield 方法的 block 被执行时才运行的语句

最佳答案

您需要在 block 外初始化一个变量,然后在 block 内设置它,然后进行测试。

executed = false
yield_method(ARGV) do |item|
executed = true
# whatever else
end
print "executed" if executed

或者您可以修改 yield_method 以根据是否满足要执行的 block 的条件返回一个值:

def yield_method(list)
list.each do |item|
yield item
end
list.any?
end

executed = yield_method(ARGV) { ... }
print "executed" if executed

也就是说,需要知道一个 block 是否被执行对我来说很糟糕——我宁愿让你的测试测试允许 block 执行的条件(如第二种形式),然后写下你的语义上反射(reflect)这一点的代码。例如:

def process_argv(list)
list.each do |item|
yield item
end
list.length
end

args_processed = process_argv(ARGV) { ... }
print "executed" if args_processed > 0

这反射(reflect)出在这种情况下,您关心是否有要处理的参数,而不是是否最终调用了某个 block 。如果该 block 有您关心的副作用,您应该直接测试该副作用,而不是基于 block 执行假设它。

关于ruby - 测试 block 执行的 ruby​​ yield 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45743756/

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