小编lt1*_*lt1的帖子

在Elixir中编写函数“ once”

我主要是从Java语言背景来学习Elixir的。在JS中,可以编写一个更高阶的函数“一次”,该函数返回一个仅调用传入函数一次的函数,并在后续调用中返回前一个结果-技巧是处理通过闭包捕获的变量:

var once = (func) => {
    var wasCalled = false, prevResult;
    return (...args) => {
        if (wasCalled) return prevResult;
        wasCalled = true;
        return prevResult = func(...args);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,由于Elixir不同的变量重新绑定行为,因此无法在Elixir中创建此函数。是否还有其他聪明的方法可以通过模式匹配或递归来实现,或者只是不可能?没有宏,我想那些可以启用它。谢谢

functional-programming memoization immutability elixir

5
推荐指数
1
解决办法
210
查看次数