- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对 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)`
所以我的问题有两个方面:
我已经尝试搜索谷歌并阅读 fold 的 dlang 文档。所有文档都使用快捷的 lambda 语法 (a, b) => a + b
。
最佳答案
所以 fold
的工作方式是它接受一个关于如何折叠下一个元素的函数别名列表。如果你不给它提供起始值,它使用第一个元素作为起始值。引用文档(强调我的):
The call
fold!(fun)(range, seed)
first assigns seed to an internalvariableresult
, also called the accumulator. Then, for each elementx in range,result = fun(result, x)
gets evaluated. Finally,result
is returned. The one-argument versionfold!(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/
我需要一个看起来像这样的类或结构 struct ThingReader { ???? lines; Thing thing; this(File f) { th
我正在尝试对 byLine() 返回的范围使用折叠操作。我希望传递给 fold 的 lambda 是一个多行函数。我搜索了谷歌并阅读了文档,但找不到关于函数签名应该是什么的描述。我推测一对是累加和,一
我正在尝试对 byLine() 返回的范围使用折叠操作。我希望传递给 fold 的 lambda 是一个多行函数。我搜索了谷歌并阅读了文档,但找不到关于函数签名应该是什么的描述。我推测一对是累加和,一
我是一名优秀的程序员,十分优秀!