如何获得覆盖内置函数的句​​柄?

时间:2013-08-13 10:07:10

标签: built-in function-overriding function-handle matlab

在我的Matlab路径上有一个自定义zeros功能。我想在变量中存储内置zeros的句柄。我怎么能这样做?

考虑@(varargin)builtin('zeros',varargin{:}),但由于字符串比较,这可能会减慢操作速度。

此外,我注意到可以将diag称为@numel\diag,但这似乎不适用于其他内置函数(特别是zeros

2 个答案:

答案 0 :(得分:4)

建议#1

% At the beginning of your script:
rmpath('C:\the\folder\containing\the\custom\zeros');
builtInZeros = @zeros;
addpath('C:\the\folder\containing\the\custom\zeros');

% Calling the custom zeros later:
a = zeros(10, 20);

% Calling the built-in zeros:
b = builtInZeros(10, 20);

建议#2

将这三行放入startup file

rmpath('C:\the\folder\containing\the\custom\zeros');
builtInZeros = @zeros;
addpath('C:\the\folder\containing\the\custom\zeros');

建议#3

重复使用内置函数的名称绝对是一个危险的想法。它破坏了脚本的可读性,使得维护起来更加困难。因此,如果您可以控制自定义zeros函数,则将其重命名为其他内容。使用一个名称来描述自定义版本与内置版本的不同之处(例如,如果它更快,则称之为fastZeros。)

答案 1 :(得分:2)

嗯,这并没有给你一个问题的确切答案,但它可以解决问题:

我认为这似乎是一个很好的解决方案:

matlabcentral: How to call a shadowed function

关于上一篇文章:

  

偶然发现了这个问题并找到了以下解决方案:For   例如,我有libsvm工具箱阴影的matlab svmtrain:

     
    
      

svmtrain -all

             

C:\项目\ Ichilov \其它\ MVPA \ LIBSVM-MAT-3.0-1 \ svmtrain.mexw64

             

C:\ Program Files \ MATLAB \ R2009b \ toolbox \ bioinfo \ biolearning \ svmtrain.m       %Shadowed

    
  
     

但我可以使用str2func访问原始函数:

     
    
      

org_svmtrain = str2func([matlabroot'\ toolbox \ bioinfo \ biolearning \ svmtrain'])

    
  
     

然后简单地调用:

     
    
      

org_svmtrain(training,groupnames)