每次调用一个函数时,如果给定的一组参数值的结果尚未被记忆,我想将结果放入内存表中.一列用于存储结果,另一列用于存储参数值.
我该如何最好地实现这一点?争论的种类繁多,包括一些枚举.
在C#中,我通常使用DataTable.Scala中有同等的东西吗?
我想在scala中编写一个memoize函数,无论函数对象是什么,它都可以应用于任何函数对象.我希望以一种允许我使用memoize的单个实现的方式这样做.我对语法很灵活,但理想情况下,memoize出现在非常接近函数声明的地方,而不是函数之后.我还想避免首先声明原始函数,然后再为memoized版本声明第二个声明.
所以一些理想的语法可能是这样的:
def slowFunction(<some args left intentionally vague>) = memoize {
// the original implementation of slow function
}
Run Code Online (Sandbox Code Playgroud)
甚至这是可以接受的:
def slowFUnction = memoize { <some args left intentionally vague> => {
// the original implementation of slow function
}}
Run Code Online (Sandbox Code Playgroud)
我已经看到了这样做的方法,其中必须为每个arity函数重新定义memoize,但我想避免这种方法.原因是我需要实现几十个类似于memoize的函数(即其他装饰器),要求每个arity函数都要复制每个函数太多了.
一种做memoize的方法确实需要你重复memoize声明(所以它没有用)是什么类型用于在Scala中存储内存中的可变数据表?.
来自Scala编程(第二版),第98页的底部:
对Scala程序员的平衡态度
首选vals,不可变对象和没有副作用的方法.首先到达他们.当您有特定的需求和理由时,请使用变量,可变对象和带副作用的方法.
在前几页解释了为什么更喜欢val,不可变对象和没有副作用的方法,所以这句话很有意义.
但第二句话:"当你有特殊的需要和理由时,使用变量,可变对象和副作用的方法." 没有这么好解释.
所以我的问题是:
什么是使用变量,可变对象和具有副作用的方法的理由或特定需要?
Ps:如果有人可以为每个人提供一些例子(除了解释),那将是很棒的.