memory
gleam add memory
为函数提供记忆,不支持递归缓存。
不支持javascript端
缓存会单独开启一个进程,如果在并发场景使用的话上一个函数调用会阻塞下一个。
原本并行调用的函数经过处理后变成了串行调用。
Example
import memory
pub fn fibonacci(i: Int) -> Int {
case i < 0 {
True -> todo
False -> fibonacci_loop(0, 1, i)
}
}
fn fibonacci_loop(a: Int, b: Int, i: Int) -> Int {
case i {
0 -> a
1 -> b
_ -> fibonacci_loop(b, a + b, i - 1)
}
}
pub fn main() {
let assert Ok(#(fibonacci, cache)) = memory.new(fibonacci, 10)
fibonacci(4) // Ok(3)
fibonacci(-2) // Error(CallPanic)
fibonacci(3) // Ok(2)
// 关闭缓存
memory.closure(cache)
fibonacci(5) // Error(CallClosed)
}
Development
gleam run # Run the project
gleam test # Run the tests