【问题标题】:Is there a cleaner way to self-reference in Matlab classes?在 Matlab 类中是否有更简洁的自我引用方式?
【发布时间】:2016-11-30 17:28:32
【问题描述】:

如果我们要调用一个修改对象属性的函数,除了在函数内部使用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.)还是这是唯一的选择?

谢谢!

【问题讨论】:

    标签: matlab oop properties self-reference


    【解决方案1】:

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

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

    所以没有。没有捷径。这就是 matlab 类的工作原理。

    【讨论】:

    • 好的,我明白了!谢谢! :)
    • 更不用说如果你的类没有继承自handle,那么任何打算“改变”你的对象的函数,只能通过返回一个新对象来覆盖旧对象,即这样你就可以做obj = doSomething(obj, args)。所以,是的,从handle 继承以便你可以“通过引用”已经是一个“作弊”,可以这么说。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    相关资源
    最近更新 更多