【发布时间】:2021-11-16 05:44:25
【问题描述】:
我有一个数组,我想要第一个块的结果,它返回一个真值(又名,不是 nil)。问题是,在我的实际用例中,测试有一个副作用(我实际上是在迭代一组队列,并从顶部弹出),所以我不需要评估第一次成功之后的块。
a,b,c = [1,2,3]
[a,b,c].first_but_value{ |i| (i + 1) == 2 } == 2
a == 2
b == 2
c == 3
有什么想法吗?
【问题讨论】:
-
@sevenseacat,请指出我哪里粗鲁,以便我改正。
-
您使用的术语我不清楚。结果是什么”?返回值?还是数组元素?什么是“块的结果”?接下来,“truthy”后面的括号让我感到困惑,因为 false 也不是truthy / truey。接下来,“测试有副作用”。我不知道您所说的“测试”是什么意思。块评估?接下来,您“不需要在第一次成功之后评估块”。这不是
#find方法通常所做的吗?我已经写了一个答案,但我不相信你真的是你所要求的。 -
最后,你的区块中的
+=运算符没有意义,因为i在每次区块评估后都会被丢弃。 -
@sevenseacat,我用更正式的语气重写了我的 cmets。内容没有改变。现在音调可以吗?
-
是的,
==是粗略的断言。而且我总是忘记 Ruby 的+=并不总是按我期望的方式工作(从 C++ 时代开始),所以你是对的,我错误地使用了我想要实现的目标。在实际用例中,它是.pop,但我觉得这需要额外的背景知识。 “结果”肯定是块的返回值。我不知道任何其他方式来解释“结果”。在我的用例中,该块将评估为nil而不是false,并不是每个阅读这些问题的人都会知道nil是假的
标签: ruby