std.regex.regex()不纯。为什么?

时间:2013-02-17 11:42:32

标签: d phobos

在D std.regex.regex()中并不纯粹:

import std.regex;

pure void test() // test.d(5): Error: pure function 'test' cannot call impure function 'regex'
{
    auto r = regex(r"patern123", "g");
}

为什么?

是吗

一个。没有投放pure个关键字。

B中。存在一些更深层次的原因

1 个答案:

答案 0 :(得分:3)

std.regex是一个模块,因此无法将其标记为纯粹。

回答A: 将函数标记为pure并不会使其变为纯粹。它只是告诉编译器你希望它是纯粹的,并且如果函数确实可以变得纯净,它将完成工作。如果它不能是纯粹的,编译器将引发错误。这就是这种情况 - test()不能是纯粹的,因为std.regex.regex() 不纯。经验法则 - 纯函数不能称为不纯函数。

回答B: 是的,存在更深层次的原因,我相信你可能已经意识到了这些原因。提醒您阅读http://en.wikipedia.org/wiki/Pure_function并问自己,您的函数test()是否满足这两个主要规则?为此,您自然需要了解std.regex.regex()函数的语义...

也许你想问为什么std.regex.regex()不纯? Mat我已经回答了这个问题。 - std.regex模块确实保留了一些缓存,并且它会改变它。