在偶然发现这个问题之后,我想到了如何定义一个纯函数。我有两条规则可以接受纯函数,这与最佳答案中引用的定义有些不同。我很想知道我的观点是否正确。我的“2条规则”是:
- 该函数不会改变程序的状态。
- 对于相同的参数或相同的本地公共程序状态,输入是恒定的。
为了澄清第二点,local public state
我主要是指public
班级成员。本地意味着状态与函数密切相关并且是它独有的(即不是一些全局变量)。我使用该定义的理由是,它只是术语 的更扩展视图(可能过于特定于 CS)arguments
,因为我认为local public state
它只是用于传递函数参数的不同接口。这个定义是可以接受的还是包含一个类上下文会破坏函数的“修剪”?
编辑:作为我的意思的示例,请考虑以下类(C++)。
class Foo
{
public:
int Number;
int foo(int v) { return Number + v; }
}
考虑到实例函数调用实际上是以下调用:
foo(&this, 123)
这与通过结构传递公共数据(数字)有何不同?
struct Foo
{
int Number;
}
foo(Foo { 1 }, 123);