一个纯函数可以调用外部函数吗?



纯函数可以调用外部方法吗?

例如:

class Dog {
  function jump(name) {
    return "a dog named " + name + " jumped!"
  }
  function jumpTwice(names) {
    var result = [];
    for (var i = 0; i < 2; i++) {
       result.push(jump(names[i]));
    }
    return result.join("n");
  }
}

jumpTwice()可以看作是pure function吗?

当你可以

一个纯f函数可以调用任何其他g0...gn函数/方法。但是g0...gn也必须是纯的

当你不能

一旦你得到一个纯函数f,你从f内调用一个非纯函数g,那么f不再是纯的。

是的,它是纯净的。它不会改变任何全局状态,也不会对相同的输入给出不同的结果。

在你给出的具体情况下,是的。但是你有一个方法,而方法需要额外的注意。

对于任何给定的输入,纯函数总是给出相同的结果,无论当前程序处于什么状态。方法可以看作是函数,它们的对象作为隐藏参数传递。纯粹地说,方法不能访问任何隐式状态(也不能调用任何其他易受隐式状态影响的方法/函数)。这也意味着不使用任何包含隐式状态的对象字段。注释的讨论希望给出一个如何判断上下文的例子。

仅仅避开可变字段是不够的——不可变字段字段中的值必须是可知的/可预测的。例如,如果一个对象包含一个不可变的私有字段,该字段在对象创建时被给定一个随机数,那么使用该值计算输出的任何方法都将是不纯的。

另一方面,如果你的Dog类有一个不可变的name字段,该字段是在对象创建时设置的,那么使用该字段的方法可以被认为是纯的(除非有其他因素使它们不合格)。

编辑

说"副作用"one_answers"纯度"是上下文(如评论中所讨论的)会有所帮助。这是我没有完全清楚地暗示使用"可知"one_answers"可预测"这两个词。注释的讨论说明了了解上下文的重要性。

相关内容

  • 没有找到相关文章

最新更新