【发布时间】:2018-07-16 15:44:35
【问题描述】:
我想按需加载一个属性,但我无法让它工作。
我有一个具有瞬态属性foo 的类。因此,保存对象时不会存储属性。当我使用调用属性 'foo' 的方法时,我希望 foo 的值从单独的 mat 文件加载并存储到对象中,只要它在工作区中。
我尝试了一些 get 和 set 方法,但无法正常工作。这可能吗?还是我总是添加一行代码来加载属性?下面的代码没有做我想要的,但它给出了我尝试的指示。
此外,下面的代码在使用该属性时会不断加载 foo.mat 文件。我只想加载一次 foo.mat 并将其存储为属性并从那里检索数据而不是加载。我的问题的原因是 foo 属性相当大,即一个本身具有许多属性的类。我只想在需要时加载它,不想将它存储在 foobar 类本身中。
classdef foobar
properties(Transient = true)
foo
end
methods
function value = get.foo(obj)
if isempty(obj.foo)
value = load('foo.mat');
disp('load foo.mat');
end
end
function obj = set.foo(obj,value)
obj.foo = value;
end
end
end
【问题讨论】:
-
“无法正常工作”的意思是……究竟是什么?您的示例运行良好。
-
好点来更好地解释它。使用我发布的脚本,例如,每次执行 object.foo 时,它都会加载 foo.mat 文件,而不是只加载一次。
-
Default Property 可能是更好的选择。
-
我不想要默认属性,因为它非常大。我只想在调用的时候加载,加载一次。