新的MATLAB版本用类方法重写了我的函数。我还能调用我的函数吗?

新的MATLAB版本用类方法重写了我的函数。我还能调用我的函数吗?,matlab,function,overriding,name-clash,name-conflict,Matlab,Function,Overriding,Name Clash,Name Conflict,我在matlab路径中的一个文件harmonic.m中有一个函数,原型为: function D = harmonic(A,B,C) 其中,重要的是,A应为double类型的矩阵 在r2014a版本中,显然MATLAB创建了一个新的内置类方法double.harmonic。因此,当我调用我的函数时,我在错误的谐波中得到一个错误。我的harmonic在路径列表中更接近(哪个harmonic显示了我的路径),这没有帮助,因为我的第一个输入是A,而harmonic(A,B,C)似乎等同于A.harm

我在matlab路径中的一个文件
harmonic.m
中有一个函数,原型为:

function D = harmonic(A,B,C)
其中,重要的是,
A
应为double类型的矩阵

在r2014a版本中,显然MATLAB创建了一个新的内置类方法
double.harmonic
。因此,当我调用我的函数时,我在错误的
谐波中得到一个错误。我的
harmonic
在路径列表中更接近(
哪个harmonic
显示了我的路径),这没有帮助,因为我的第一个输入是
A
,而
harmonic(A,B,C)
似乎等同于
A.harmonic(B,C)


有没有办法直接调用我的函数?要忽略此
double.harmonic
功能?我知道我可以从路径创建一个函数句柄,但这很糟糕。我正在寻找一个更优雅的解决方案或解决方法。最明显的是更改我的函数名,但这样我会感到受欺负:-(.

将您的
harmonic
版本放入文件夹
@double
,并确保您的文件夹
@double
位于路径上的
\toolbox\symbol\symbol\@double
上方(这个新的
double.harmonic
来自符号工具箱)


这将迫使您的函数成为<代码>双< /代码>,即“代码>双。谐波< /代码>,而不是泛型函数<代码>谐波< /代码>。当决定要调度哪个东西时,Matlab将先考虑方法,然后再考虑泛型函数。方法,而你的方法走在前面,你的方法会赢。砰-吃吧,MATLAB!

我感觉到你的痛苦:MATLAB对类方法的尝试也让我陷入了一个循环。我是……显然,没有办法直接调用一个隐藏或不在路径上的函数……尽管我知道你的函数不是真正隐藏的,但效果是一样的…+1用于解决方案,但这似乎仍然是一种短视的方法。覆盖内置函数总体上似乎不是一个好主意。OP的最佳选择可能是重命名其函数,并学会忍受这种受欺负的感觉:)也许有一天MathWorks会修复语言的缺点,并给我们提供名称空间之类的东西来解决这些问题。@Praetorian我知道你在说什么。重写函数通常不是一个好主意。但是,如果你重写bas MATLAB中的函数,这主要是一个问题,这可能取决于n被产品的其他部分覆盖;这覆盖了Symbolic Toolbox中的某些内容,它(大部分)是一个叶子产品,因此我认为问题的可能性较小。@Praetorian您希望从名称空间中得到什么,而包没有提供给您?它们似乎适合我需要的所有内容。非常不幸的是,它们不能在这种情况下使用(由于该方法为双精度
,不在程序包中),我认为MathWorks将
调和
实现为
double
上的一种方法,而不是作为一个常规函数,这有点反社会;但总的来说,我不知道除了包提供的功能之外,您还想看到什么。我不喜欢包的地方是它们与文件系统有着千丝万缕的联系使文件组织在某些情况下不必要地不合逻辑。但您可以对MATLAB中的所有函数提出同样的抱怨。当我说名称空间支持时,我指的是文件中包含的内容,不一定反映文件所在的路径。但是,我同意您的观点,即在大多数CA中,包是足够的锿。