为什么我不能使用带有谓词函数的std.algorithm.count

时间:2015-10-09 20:22:01

标签: d phobos

以下代码无法编译:

assert("(((())))()()()()))".count!(c => c.among!('(', ')')) > 0);

显示错误消息:

"Error: template std.algorithm.searching.count cannot deduce function from argument types !((c) => c.among!('(', ')'))(string), candidates are..."

但是[标准库(http://dlang.org/phobos/std_algorithm_searching.html#.count)清楚地表明存在count的重载,它接受一个谓词,计算谓词返回true的R的所有元素。那么,当我尝试以这种方式使用count时,为什么编译器会抱怨?

1 个答案:

答案 0 :(得分:7)

assert("(((())))()()()()))".count!(c => c.among!('(', ')') != 0) > 0);

问题是:

  1. 您的lambda正在返回uint而不是bool(请查看文档以获取among的返回值)。
  2. 编译器错误无效。