gpt4 book ai didi

scala - 拉皮条 scalaz 备忘录

转载 作者:行者123 更新时间:2023-12-04 05:08:12 25 4
gpt4 key购买 nike

我喜欢新的 scalaz Memo 功能,但发现它缺少两件事:1)它隐藏了我需要访问的底层 Map——至少是所有值的列表,以及 2)我想要一个使用 val 实现的版本我在某处读到的 scala.collection.concurrent.TrieMap 比 var Map 更可取。

我还不是一个隐含的巫师。有没有办法拉皮条这个 Memo 类来添加支持此功能的版本,或者我将不得不剪切/粘贴到一个独特的新类中?

最佳答案

这可以通过内置的 Memo.memo 函数来完成。 Memo.memo 从函数 F => K => V 创建一个 Memo 实例。这也让您可以轻松访问底层特里。例如:

scala> def trieMemo[A, B](trie: collection.concurrent.TrieMap[A, B]) = 
Memo.memo[A, B](f => k => trie.getOrElseUpdate(k, f(k)))
trieMemo: [A, B](trie: scala.collection.concurrent.TrieMap[A,B])scalaz.Memo[A,B]

scala> val trie = collection.concurrent.TrieMap[Int, Int]()
trie: scala.collection.concurrent.TrieMap[Int,Int] = TrieMap()

scala> val f = trieMemo(trie)(n => n * n)
f: Int => Int = <function1>

scala> f(5)
res0: Int = 25

scala> f(10)
res1: Int = 100

scala> trie
res2: scala.collection.concurrent.TrieMap[Int,Int] = TrieMap(5 -> 25, 10 -> 100)

关于scala - 拉皮条 scalaz 备忘录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15238362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com