gpt4 book ai didi

d - 使用 File().byLine() 和 fold()

转载 作者:行者123 更新时间:2023-12-02 17:59:47 25 4
gpt4 key购买 nike

我正在尝试对 byLine() 返回的范围使用折叠操作。我希望传递给 fold 的 lambda 是一个多行函数。我搜索了谷歌并阅读了文档,但找不到关于函数签名应该是什么的描述。我推测一对是累加和,一个是当前元素。这是我拥有的,但不会构建


auto sum = File( fileName, "r" )
.byLine
.fold!( (a, b)
{
auto len = b.length;
return a + len;
});

我从 dmd 得到的错误是:

main.d(22): Error: no property `fold` for `(File(null, null)).this(fileName, "r").byLine(Flag.no, '\n')` of type `std.stdio.File.ByLineImpl!(char, char)`

所以我的问题有两个方面:

  1. 我在这种情况下使用折叠是否有效?
  2. 如何传递 curley 括号 lambda 以进行折叠?

我已经尝试搜索谷歌并阅读 fold 的 dlang 文档。所有文档都使用快捷的 lambda 语法 (a, b) => a + b

最佳答案

所以 fold 的工作方式是它接受一个关于如何折叠下一个元素的函数别名列表。如果你不给它提供起始值,它使用第一个元素作为起始值。引用文档(强调我的):

The call fold!(fun)(range, seed) first assigns seed to an internalvariable result, also called the accumulator. Then, for each elementx in range, result = fun(result, x) gets evaluated. Finally, resultis returned. The one-argument version fold!(fun)(range) workssimilarly, but it uses the first element of the range as the seed(the range must be non-empty).

您的原始代码不起作用的原因是您不能将整数添加到字符串(种子是文件的第一行)。

你的最新版本能工作的原因(虽然只在 32 位机器上,因为你不能在 64 位机器上将 size_t 重新分配给 int)是因为你给了它一个起始值 0 播种折叠。所以这是用于您的用例的正确机制。

文档有点奇怪,因为该函数实际上不是同名模板,所以它有两个 文档部分 -- 一个用于模板,一个用于折叠函数。 fold 函数文档列出了 fold 接受的运行时参数,在本例中为输入范围和种子。它的文档链接在这里:https://dlang.org/phobos/std_algorithm_iteration.html#.fold.fold

关于d - 使用 File().byLine() 和 fold(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74668853/

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