0

在偶然发现这个问题之后,我想到了如何定义一个纯函数。我有两条规则可以接受纯函数,这与最佳答案中引用的定义有些不同。我很想知道我的观点是否正确。我的“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);
4

1 回答 1

4

不,“或相同的本地公共程序状态”不在其他人都同意的纯方法定义中。

纯函数仅根据输入参数和输入参数计算值,除了返回计算值之外,不会产生任何可观察到的副作用。

我建议您查看有关 Pure 函数的 Wikipedia 页面,因为它显示了一些示例。

--

另请注意,“没有可观察到的副作用”并不意味着“没有任何副作用”,但与这两者重叠的灰色区域通常仅包括您无法控制且通常不会观察到的特定于运行时的副作用。

这还包括诸如“有足够的内存来分配所需的内存”之类的状态。

于 2017-11-01T07:12:03.663 回答