是依赖publicclass成员的函数可以认为是纯函数
Is a function that depends on public class members can be considered pure
在偶然发现 之后,我想到了如何定义一个纯函数。我有两条规则来接受纯函数,这与最佳答案中引用的定义有些不同。我很想知道我的观点是否正确。
我的“2 条规则”是:
- 该函数不会改变程序的状态。
- 对于相同的参数或相同的本地public程序状态,输入是常量。
为了澄清第二点,local public state
我主要是指 public
class 成员。本地意味着状态与函数强相关并且是它独有的(即不是一些全局变量)。
我使用该定义的原因是它只是对术语 arguments
的更扩展的视图(可能对 CS 来说过于具体),因为我认为 local public state
只是用于传递函数参数的不同接口。
这个定义是否可以接受,或者包含 class 上下文是否会破坏函数的 "prunes"?
Edit:作为我的意思的示例,请考虑以下 class (C++)。
class Foo
{
public:
int Number;
int foo(int v) { return Number + v; }
}
考虑到一个实例函数调用实际上是下面的调用:
foo(&this, 123)
这与通过结构传递 public 数据(数字)有何不同?
struct Foo
{
int Number;
}
foo(Foo { 1 }, 123);
不,"or the same local public program state" 不在其他人都同意的纯方法定义中。
纯函数根据输入参数和单独的输入参数计算值,并且除了返回计算值外,不会产生任何可观察到的副作用。
我建议您看一下 Wikipedia page on Pure function,因为它显示了一些示例。
--
另请注意,"no observable side effects" 并不意味着 "no side effects whatsoever",但与这两者重叠的灰色区域通常仅包括您无法控制且通常不会观察到的特定于运行时的副作用。
这还包括 "there is enough memory to allocate the memory needed" 等州。
在偶然发现
- 该函数不会改变程序的状态。
- 对于相同的参数或相同的本地public程序状态,输入是常量。
为了澄清第二点,local public state
我主要是指 public
class 成员。本地意味着状态与函数强相关并且是它独有的(即不是一些全局变量)。
我使用该定义的原因是它只是对术语 arguments
的更扩展的视图(可能对 CS 来说过于具体),因为我认为 local public state
只是用于传递函数参数的不同接口。
这个定义是否可以接受,或者包含 class 上下文是否会破坏函数的 "prunes"?
Edit:作为我的意思的示例,请考虑以下 class (C++)。
class Foo
{
public:
int Number;
int foo(int v) { return Number + v; }
}
考虑到一个实例函数调用实际上是下面的调用:
foo(&this, 123)
这与通过结构传递 public 数据(数字)有何不同?
struct Foo
{
int Number;
}
foo(Foo { 1 }, 123);
不,"or the same local public program state" 不在其他人都同意的纯方法定义中。
纯函数根据输入参数和单独的输入参数计算值,并且除了返回计算值外,不会产生任何可观察到的副作用。
我建议您看一下 Wikipedia page on Pure function,因为它显示了一些示例。
--
另请注意,"no observable side effects" 并不意味着 "no side effects whatsoever",但与这两者重叠的灰色区域通常仅包括您无法控制且通常不会观察到的特定于运行时的副作用。
这还包括 "there is enough memory to allocate the memory needed" 等州。