在 Matlab 类 中是否有更简洁的自引用方式?

Is there a cleaner way to self-reference in Matlab classes?

如果我们想调用一个修改对象属性的函数,除了在函数内部使用obj.property之外,还有其他自引用的方法吗?

示例(其他语言如Java):

public void doSomething(int arg)
    foobar = arg;
end

但是使用 Matlab 的例子:

classdef Foo < handle
    properties
        foobar = 0;
    end
    methods
        function obj = Foo(arg)
            if nargin > 0 
                obj.foobar = arg;
            end
        end
        function doSomething(obj, arg)
            obj.foobar = obj.foobar + arg; % Needed to reference the current object
        end
    end   
end

有了更多的属性,它可能开始看起来很乱,因为写了所有的“obj。
我看到有些人使用“o."(更少的字符看起来更好),但我想知道是否有更好的方法(即:不使用 obj.)或者这是唯一的选择?

谢谢!

这是唯一的选择,是的。将 obj 作为第一个参数传递是必要的,因为 matlab 使用 "dynamic dispatch" 选择函数的正确版本。 IE。如果你有两个 类 并且都定义了 doSomething 函数,matlab 将根据第一个参数的类型调用正确的版本;这就是为什么成员函数的第一个参数(构造函数除外)总是需要是对象本身。

而在 java 中,发生了一些完全不同的事情,因为它是一种编译语言,而不是解释语言。还有就是多态等情况

所以没有。没有捷径。这就是 matlab 类 的工作方式。