【发布时间】:2018-05-07 05:20:39
【问题描述】:
我来到 Elixir 的主要背景是 Javascript。在 JS 中,可以编写一个高阶函数“once”,它返回一个函数,该函数只调用传入的函数一次,并在后续调用中返回先前的结果——诀窍是操纵通过闭包捕获的变量:
var once = (func) => {
var wasCalled = false, prevResult;
return (...args) => {
if (wasCalled) return prevResult;
wasCalled = true;
return prevResult = func(...args);
}
}
在我看来,无法在 Elixir 中创建此函数,因为它具有不同的变量重新绑定行为。有没有其他聪明的方法可以通过模式匹配或递归来做到这一点,还是不可能?如果没有宏,我想那些可能会启用它。谢谢
【问题讨论】:
-
顺便说一下,为了您将来的参考,您所要求的称为“memoization”。以防万一您对此有更多疑问,最好了解未来 Google 搜索的正确术语。
标签: functional-programming elixir immutability memoization