gpt4 book ai didi

d - std.algorithm.filter!() 模板有两个参数而不是一个?

转载 作者:行者123 更新时间:2023-12-05 00:40:14 25 4
gpt4 key购买 nike

这是一个例子:

int[] arr = [ 1, 2, 3, 4, 5 ];
auto foo = filter!("a < 3")(arr);
assert(foo == [ 1, 2 ]); // works fine

现在我希望能够参数化谓词,例如
int max = 3;
int[] arr = [ 1, 2, 3, 4, 5 ];
auto foo = filter!("a < max")(arr); // doesn't compile

这个片段显然不会编译,正弦过滤器!()的谓词只接受一个参数。有没有办法克服这个限制而不诉诸良好的 for/foreach 循环?

最佳答案

字符串 lambda 只是库级别的便利,旨在比 D 的内置函数/委托(delegate)/模板文字更简洁。当您需要更多电源时,请执行以下操作:

注:以下应该 工作,但由于编译器错误,在撰写本文时可能会出现异常行为。

import std.algorithm;

void main() {
int max = 3;
int[] arr = [ 1, 2, 3, 4, 5 ];
auto foo = filter!((a) { return a < max; })(arr);
}

以下实际上确实有效:
import std.algorithm;

void main() {
int max = 3;
int[] arr = [ 1, 2, 3, 4, 5 ];
auto foo = filter!((int a) { return a < max; })(arr);
}

区别在于是否明确指定了类型。

关于d - std.algorithm.filter!() 模板有两个参数而不是一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3864500/

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