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

时间:2016-09-14 18:57:13

标签: function functional-programming concept pure-function

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

例如:

MyIntVector

可以将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()吗?

3 个答案:

答案 0 :(得分:6)

何时可以

setClass("Class", c(...)) Class <- function(x, y, z) { new("Class", x, y, z) } 函数可以调用任何其他函数/方法f。 但g0...gn也必须

当你不能

只要您获得纯函数g0...gn并从f中调用非纯函数g,那么f就是f不再纯洁。

答案 1 :(得分:0)

是的,它很纯粹。它不会改变任何全局状态,也不会为相同的输入提供不同的结果。

答案 2 :(得分:0)

在具体情况下,你给,是的。但是你所拥有的方法和方法需要额外的关注。

无论当前程序状态如何,纯函数总是为任何给定的输入提供相同的结果。方法可以被视为将其对象作为隐藏参数传递的函数。为了纯粹,该方法不能访问任何隐式状态(也不能调用易受隐式状态影响的任何其他方法/函数)。这意味着也不使用包含隐式状态的任何对象字段。评论讨论有希望举例说明如何判断这种背景。

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

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

修改

说&#34;副作用&#34;会很有帮助。和&#34;纯度&#34;是上下文(如评论中所讨论的)。通过使用&#34;可知的&#34;这些,我完全没有明确提到这一点。和&#34;可预测&#34;。评论讨论说明了了解背景的重要性。