【问题标题】:The use of "this" in every MATLAB class在每个 MATLAB 类中使用“this”
【发布时间】:2012-01-16 19:16:18
【问题描述】:

为什么在 MATLAB 的每个类中我都必须使用“this”?我认为在 C++ 中我不需要使用“this”,只要我愿意。 MATLAB中也是这样吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    简而言之,您必须使用某种显式引用。

    首先,与 C++/C#/Java 中的 this 不同,您可以使用任何您想要的名称。 必须使用显式调用的原因是Matlab designers decision。 这个想法是支持对对象的 Matlab 向量操作,就好像它们是 结构。以下是上面链接的片段:

    虽然带有隐式对象参数的语言提供了“this”关键字 要访问隐式对象,它们通常不需要您访问 通过“这个”获得财产。如果 MATLAB 具有隐式属性,则逻辑 对基于数组的对象的扩展将是无索引:
    S = S + (k).Value;

    编辑: 在@AndrewJanke 的好评之后,我想补充一点,MATLAB 可以将 this 作为隐式引用,并且只强制在基于数组的对象的索引中使用它。然而,MATLAB 设计人员并未选择这种方法。

    【讨论】:

    • Python 类方法不需要命名显式实例引用self。这也是一种约定,就像在 MATLAB 中一样。
    • 我认为这个阅读忽略了核心原因:多重调度,在链接的文章中被“多个对象参数之间的对称性”暗示。例如。对于f(A, B, C) 方法,任何输入都可能是方法调度对象,或者它们在概念上可能是对等点,因此尚不清楚先验应该成为this。它甚至可以称为f(2, 3, X)。索引问题可以通过隐含的this 参数来解决,并且只要求您在方法中使用()-indexing 时使用它,就像在C++ 中调用重载的[] 时一样。 (我认为。)
    • @AndrewJanke,所以基本上你是说主要问题是语法 foo(obj) 而不是 obj.foo()?一个有趣的想法。顺便说一句,我同意它可以通过使用隐式参数并仅在索引时使用它来解决。
    • 是的,foo(obj) 语法及其支持的功能。例如,它允许您使用 plus() 以可交换的方式定义 + 行为,或定义可用作现有函数参数的直接替换的类。
    猜你喜欢
    • 2013-02-23
    • 2017-02-08
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2011-07-24
    • 2019-08-09
    相关资源
    最近更新 更多