【问题标题】:calling a nested function in a class在类中调用嵌套函数
【发布时间】:2016-05-17 20:22:57
【问题描述】:
classdef hello < handle
        methods
            function first(obj)
                a=4;
                function second(obj)
                    a
                end
            end
        end
end

我希望能够调用函数“obj.second”。

这是我尝试过的:

>> hello_obj=hello;
>> hello_obj.first
>> hello_obj.second
No appropriate method, property, or field second for class hello.

>> hello_obj.first.second
Attempt to reference field of non-structure array.

>> hello_obj.first.hello_obj.second
Attempt to reference field of non-structure array.

谢谢

【问题讨论】:

  • 这不可能,你为什么认为你必须这样做?
  • 我想利用嵌套函数可以访问其父函数的工作区这一事实(我不希望“a”成为属性)。
  • a 在您尝试调用 second 时不再存在。我认为房产是最好的解决方案,但你可以解释你不使用房产的原因。这可能会带来更好的解决方案。
  • 出于一个非常实际的原因:正如它所写的那样,在执行结束时,我的代码会保存工作区(包括对象),我不希望像这样的“工作”变量已保存。

标签: matlab class oop nested


【解决方案1】:

保存时使用Transient 属性a 跳过它。对于无法应用 Transistent 的情况,重载 saveobj and loadobj 是一个不错的选择。

【讨论】:

  • 你能帮我用吗?对不起。 classdef hello properties a=4 end properties (Transient=true) b=23 end end >> hello_obj=hello; >> save('hello_obj') hello_obj.mat 包含一个包含两个属性的对象。
  • @Michaël:不,它不会将b 存储在mat 文件中,它会使用将其设置为23 的构造函数重新初始化。试试hello_obj=hello; hello_obj.a=5; hello_obj.b=24; save('hello_obj'); clear hello_obj; load('hello_obj')
  • 谢谢!事实上,我根本不希望将 hello_obj.b 保存为空变量。
  • 我不明白你想要达到什么目的。请举例说明您的数据结构以及要保存的部分。
  • classdef hello 属性 a b end end >> hello_obj=hello; >> save('hello_obj') 我不希望将“b”保存为空变量。