我的代码有一些属于我无法修改的第三方类的对象的句柄。此类重载 eq 以便与其像 == 的内置版本那样比较句柄是否指向同一个对象,而是根据输入对象的值进行不同的比较,无论是否给定两个句柄相同的对象与否。
我明确地想检查两个句柄是否指向同一个对象。我想也许 builtin 会救我。但是 builtin('eq',A,B) 只会导致错误:

好像 builtin 只喜欢“纯”函数,而 handle.eqhandle 类的一个特殊方法,区别于对纯函数进行操作的内置函数 eq
使用 eq 使用类名显式调用 handle.eq(A,B) 也不起作用 - 这会产生错误

奇怪的是,使用相同的语法 ThirdPartyClass.eq(A,B) 调用重载会产生不同的错误:

因此,我不清楚 handle.eq(A,B) 是否也必须解释为对静态方法的调用。但至少以这种确切的形式,它似乎不是调用(重载)常规方法的可行途径。
那么我是否已经被这门课的作者非常不体贴的设计选择所结束?或者有什么方法可以访问被如此肆无忌惮重载的父类(super class)的方法?或者实际上,一种从头开始实现 handle.eq 功能的方法(尽管这是 MATLAB 的内置函数之一,其实现在 m 代码中不可见)?

最佳答案

遍历 list of public methods for handle 导致了一种在这种情况下可行的解决方案。由于 lege 在此类中未重载,因此表达式 A <= B & A >= BA == B 对没有 eq 重载的句柄类的结果相同。

关于matlab - 是否可以检查重载 eq 的类的句柄相等性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58921487/

10-12 22:28