Matlab 是否可以在一行中从函数中获取类值并对其进行修改?

Matlab 是否可以在一行中从函数中获取类值并对其进行修改?,matlab,static,return-value,pass-by-value,Matlab,Static,Return Value,Pass By Value,如果我有课 classdef foo properties a = 0; end methods function obj foo(obj) obj.a = 5; end end end 和一个函数 function result = GetFoo() result = foo(); end 在命令解释器处: >> x = GetFoo() x = foo

如果我有课

classdef foo
    properties
        a = 0;
    end

    methods
        function obj foo(obj)
            obj.a = 5;
        end
    end
end
和一个函数

function result = GetFoo()
    result = foo();
end
在命令解释器处:

>> x = GetFoo()

x =

  foo

  Properties:
                       a: 5

  Methods

>> x.a = 10

x =

  foo

  Properties:
                       a: 10

  Methods
这将生成一个foo实例,并且可以指定值“a”。但是,在一个步骤中执行相同的操作:

>> GetFoo().a = 10

GetFoo =

  a: [1x1 struct]
这将创建一个名为GetFoo的新结构,该结构重写该类并为其提供一个名为“a”的成员。代码不是获取GetFoo()的结果(类实例)并设置其属性“a”=10,而是执行此操作。我可以看出,这很可能是动态创建弱类型结构的能力带来的后遗症,代码必须向后兼容。这似乎还与以下事实有关:MATLAB没有指针的概念,因此每个输入/输出参数都是一个深度副本,而上述即使有效也将设置GetFoo()值的副本用于获取其返回对象的源代码,然后将其丢弃


尽管如此,目标确实是能够完成我需要的所有工作,而无需创建和清除临时变量。其目的是代码的可维护性和外观风格。

您的问题中混合了许多不同的问题/抱怨,但我怀疑您想要的是一个
句柄
类。从
handle
(即write
classdef foo
)继承您的类,您的类将具有基本上通过引用传递的行为。您是对的,MATLAB不使用指针,但对于handle类,它确实具有引用

另外,在MATLAB中不可能索引到函数的输出(即写入
GetFoo.a
GetFoo().a
)-无论它是否返回值或句柄类,都需要一个临时变量


请注意,在上面的示例中,
GetFoo().a=10
的结果不是属性
a
等于10的
foo
的实例-它是一个字段
a
等于10的结构。Type
class(GetFoo)
,您将看到它是一个结构,而不是一个foo。

这真的很难看,但只是在一行中举起了做这件事的手套。:-)

首先,我将稍微修改该类,以便您可以看到构造函数被调用:

classdef foo
properties
        a = 0;
end;

methods
        function obj = foo()
                obj.a = 5;
                display('foo!');
        end;
end;
end
命令窗口中运行的一行程序:

>> subsasgn(GetFoo(), struct('type', '.', 'subs', 'a'), 10);
foo!
一些注释:1)有一些看起来像指针的东西:
handle
类,即继承
handle
抽象类的类。它们被创建一次并作为引用传递,直到没有其他东西引用它们(然后它们被销毁)。但是,这对您提到的行为没有帮助。2) 保持全局工作区整洁的最佳方法是尽可能多地使用函数。他们的本地工作区会自动清理。3)我认为一行就可以做你想做的事情,但比两步做要难看得多。我会试着把这个令人讨厌的问题作为一个答案,但请不要投反对票。:-)