如果我们想要调用一个修改对象属性的函数,除了在函数中使用 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
有了更多属性,通过编写所有&#34; obj。&#34;它可能会变得一团糟。我看到有些人使用&#34; o。&#34; (较少的字符看起来更好一些),但我想知道是否有更好的方法(即:不使用 obj。)或者这是唯一的选择吗?
谢谢!
答案 0 :(得分:2)
这是唯一的选择,是的。传递obj
作为第一个参数是必要的,因为matlab使用&#34;动态调度&#34;选择正确版本的函数。即如果你有两个类并且都定义doSomething
个函数,matlab将根据第一个参数的类型调用正确的版本;这就是为什么成员函数的第一个参数(构造函数除外)总是需要成为对象本身。
然而在java中,一些完全不同的东西正在发生,因为它是一种编译语言,而不是一种解释型语言。这是一个多态性等案例。
所以没有。没有捷径。这就是matlab类的工作原理。