You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arrow中Schedule.doWhile()输入输出参数差异及output作用咨询

Arrow框架中Schedule.doWhile()的input与output参数解析

1. input与output的核心差异

  • input:代表本次任务执行前传入的输入值。在重复执行场景中,它通常是上一轮任务执行完成后的返回值(即上一轮的output)。
  • output:代表本次任务执行完成后的返回值,也就是当前轮次任务的直接结果。

doWhile的lambda通过这两个值的判断逻辑,决定是否继续下一轮重复执行。

2. 示例中output与input看似相同的原因

你提供的示例里,repeat块的逻辑依赖外部变量result更新并返回,没有显式利用input驱动任务执行——每一轮任务的状态完全由外部变量维护,而非传入的input。

但实际上每一轮的input和output是不同的:

  • 第一轮:input是初始空字符串(result的初始值),执行任务后output变为"a";
  • 第二轮:input变为上一轮的output("a"),执行任务后output变为"aa";
  • 以此类推,直到input.length > 5时停止,最终result是"aaaaaa"。

如果换一个依赖input的任务逻辑,就能直观看到两者的差异:

import arrow.resilience.Schedule

suspend fun main() {
    Schedule
        .doWhile<Int> { input, output -> output < 100 }
        .repeat(initial = 2) { currentInput ->
            // 任务基于输入计算新输出
            currentInput * 2
        }
}

这个例子中:

  • 第一轮:input=2,任务执行后output=4;
  • 第二轮:input=4,任务执行后output=8;
  • 直到output=128时不满足判断条件,停止重复。

这里input是上一轮的输出,output是当前计算的新值,两者差异非常明显。

3. doWhile的实际作用

doWhile的核心价值在于通过input和output的关系实现灵活的重复控制:

  • 你可以基于上一轮输入(input)和当前输出(output)的对比,判断是否继续执行——比如检查输出是否比输入达到了预期的提升比例,或者是否符合特定业务规则,从而决定是否继续重试/重复。

内容的提问来源于stack exchange,提问作者Vencat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:44:52