gpt4 book ai didi

dart - 可迭代惰性函数变得太懒了

转载 作者:行者123 更新时间:2023-12-03 03:31:03 25 4
gpt4 key购买 nike

这段代码让我很困惑。在此代码中,takeWhile 有意义 - 记入借方,在余额为正时减少余额。问题是这段代码没有任何反应。没有调用balance.debit(),我猜原因是takeWhile过滤延迟发生。

我可以确保通过添加 toList() 调用来调用它,但这似乎很浪费,因为实际上并不需要列表。

  • 有什么更好的方法可以做到这一点?
  • takeWhile 不是适合这项工作的工具吗?

代码如下:

class Balance {
Balance(this._balance);
double _balance;
debit(double amount) {
print('Debiting $amount');
return (_balance -= amount);
}
}

main() {
final balance = new Balance(3.0);
final debits = [ 1.0, 2.0, 3.0 ];
debits.takeWhile((debit) => balance.debit(debit) > 0);

//////////////////////
//debits
// .takeWhile((debit) => balance.debit(debit) > 0)
// .toList();
}

最佳答案

不,takeWhile 不是适合这项工作的工具。

正如您所注意到的,它很懒。它的目的是创建一个新的可迭代对象,并且只有在您实际使用该可迭代对象时它才会执行某些操作。在这里,你对结果根本不感兴趣,所以你只想要“while”部分,而不关心“take”。选择:

for (debit in debits) {
if (balance.debit(debit) < 0) break;
}

我什至发现它更容易阅读。

关于dart - 可迭代惰性函数变得太懒了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23351787/

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