我主要是从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中创建此函数。是否还有其他聪明的方法可以通过模式匹配或递归来实现,或者只是不可能?没有宏,我想那些可以启用它。谢谢