我发现这句话:
什么是纯函数在这个声明中,有人能提供例子吗?先谢谢你。
sczxawaw1#
这是一个纯函数:
int foo(int n) { return n*2; }
调用它的结果只取决于它的参数。这不是一个纯函数:
int i = 42; int bar(int n) { ++i; return n*i; }
返回的值取决于参数以外的东西。
3duebb1j2#
函数是纯函数,如果:1.它没有语义上可观察到的副作用1.对于相同的输入,始终返回相同的结果所以函数仍然可以有一个状态,但它不应该是可观察的。例如:
int foo(std::vector<int> v) { static std::vector<int> tmp; tmp.resize(v.size); std::transform(v.begin(), v.end(), tmp.begin(), [](int a) {return a * a;}); return std::accumulate(tmp.begin(), tmp.end(), 0); }
函数foo有一个状态(静态向量),但是它在语义上是不可观察的,因此它是纯的。这是一个愚蠢的功能,但它应该表明这一点。
axkjgtzd3#
纯函数没有副作用,总是返回一个仅由其输入值确定的结果,并且对于相同的输入值,返回值总是相同的。它们非常容易测试。纯函数的一个例子是Redux中的reducer(理想情况下,它们应该是纯函数)。副作用的示例是例如http请求。下面是一个纯函数的代码示例:
int multiplyByTwo(int n) { return n * 2; }
3条答案
按热度按时间sczxawaw1#
这是一个纯函数:
调用它的结果只取决于它的参数。
这不是一个纯函数:
返回的值取决于参数以外的东西。
3duebb1j2#
函数是纯函数,如果:
1.它没有语义上可观察到的副作用
1.对于相同的输入,始终返回相同的结果
所以函数仍然可以有一个状态,但它不应该是可观察的。例如:
函数foo有一个状态(静态向量),但是它在语义上是不可观察的,因此它是纯的。这是一个愚蠢的功能,但它应该表明这一点。
axkjgtzd3#
纯函数没有副作用,总是返回一个仅由其输入值确定的结果,并且对于相同的输入值,返回值总是相同的。
它们非常容易测试。
纯函数的一个例子是Redux中的reducer(理想情况下,它们应该是纯函数)。副作用的示例是例如http请求。
下面是一个纯函数的代码示例: