在 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 类 的工作方式。
如果我们想调用一个修改对象属性的函数,除了在函数内部使用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 类 的工作方式。