【发布时间】:2023-01-07 09:17:22
【问题描述】:
假设您在 MATLAB 中有一个要记忆的类方法,以便缓存以前计算的结果,从而节省计算时间。 MATLAB 有一个内置的memoize 函数,但文档只关注将此函数应用于普通 MATLAB 函数。从版本 R2022b 开始,文档不提供有关类方法记忆的指导。
一种可行的方法是采用原始的公共类方法,重命名它,将其设为私有或受保护以将其隐藏在类的公共接口中,并创建一个新方法,它只是一个具有原始方法名称和路由方法调用的包装器到隐藏的原始类方法的记忆版本。
classdef SomeClass < handle
methods
function returnValue = MemoizedVersionOfClassMethod(this, args)
memoizedMethod = memoize(@NonMemoizedVersionOfClassMethod);
returnValue = memoizedMethod(this, args);
end
end
methods (Access = protected)
function returnValue = NonMemoizedVersionOfClassMethod(this, args)
returnValue = % do some expensive computation here
end
end
end
有没有另一种方法可以避免为每个记忆类方法创建包装器方法?
有一个现有的(未回答的)问题 (Memoize a method of a class in matlab) 询问如何记忆类方法。我上面的代码提供了一个解决方案,但我不确定它是好的解决方案。这是否可以通过避免伴随这种方法的包装方法激增的方式来完成?
【问题讨论】:
-
一个优雅的答案是可以为一组方法设置的
memoize属性。 (例如:(Access = public, Memoizable = true)),这当然不存在。您当前的解决方案实际上对我来说相当正确。根据问题的不同,我可能采取的另一种选择是记住该方法的相关内容。一个银河大脑解决方案是编写一个类名MemoizeWrapper,其中包含要作为私有属性记忆的类的副本,并使用一些 [mumble] 动态方法名称解释传递方法调用。 (可能很有趣,但想法很糟糕。)
标签: matlab oop memoization