提问人:Will 提问时间:11/19/2019 最后编辑:CommunityWill 更新时间:11/19/2019 访问量:75
是否可以检查重载 eq 的类的句柄是否相等?
Is it possible to check for handle equality for a class that overloads eq?
问:
我的代码有一些属于第三方类的对象的句柄,我无法修改这些句柄。此类重载,因此,它不会像内置版本那样比较句柄是否指向同一对象,而是根据输入对象的值进行不同的比较,而不管是否为同一对象提供两个句柄。eq
==
我明确地想检查两个句柄是否指向同一个对象。我想也许会救我。但只会导致错误:builtin
builtin('eq',A,B)
使用内置时出错
未定义的运算符“==”,用于类型为“ThirdPartyClass”的输入参数。
它似乎只喜欢“纯”函数,并且是类的一种特殊方法,与对纯函数进行操作的内置函数不同。builtin
handle.eq
handle
eq
使用类名显式调用也不起作用 - 这会产生错误eq
handle.eq(A,B)
没有为类“handle”找到具有匹配签名的方法“eq”。
奇怪的是,使用相同的语法调用重载会产生不同的错误:ThirdPartyClass.eq(A,B)
类 ThirdPartyClass 没有名为“eq”的 Constant 属性或 Static 方法。
因此,我并不完全清楚是否也必然被解释为对静态方法的调用。但至少在这种确切的形式下,它似乎不是调用(重载的)常规方法的可行途径。handle.eq(A,B)
那么,我是否被这门课的作者非常不周到的设计选择所困扰?或者有没有办法访问如此鲁莽地重载的超类的方法?或者,实际上,一种从头开始实现目标的方法(尽管这是 MATLAB 的内置函数之一,其实现在 m 代码中不可见)?handle.eq
答:
通过查看公共处理
方法列表,得出了一个在这种情况下可行的解决方案。由于 和 在此类中未重载,因此表达式的结果与处理类的结果相同,而没有重载。le
ge
A <= B & A >= B
A == B
eq
评论
handle.eq(A,B)
method@parentClass()
isequal(A, B)
method@parentClass()
A base class method can only be called from the same method in a subclass.
handle.isequal
handle.eq
A
B
eq
isequal