我想从具有以下代码(MATLAB R2015a
)的函数编译MEX:
function r = MyFunc(x,type)
ind = randi(numel(x), 1);
getInd = @getIndFixed;
if strcmpi(type, 'random')
ind = numel(x);
getInd = @getIndRandom; % error here
end
x(getInd(ind)) = 1;
end
function k = getIndFixed(n)
k = n;
end
function k = getIndRandom(n)
k = randi(n, 1);
end
我在上面指定的行中type mismatch
和getIndFixed
之间出现getIndRandom
错误:
类型不匹配:function_handle getIndFixed〜= getIndRandom。
在C中,函数的签名是:
int (*getInd)(int);
int getIndFixed(int);
int getIndRandom(int);
//...
getInd = getIndFixed;
getInd = getIndRandom;
答案 0 :(得分:0)
在代码生成中分配函数句柄后,不能将它们更改为不同的函数。不像" C"这些函数调用在编译时解析。如果您的type
输入是常量,那么您可以将代码编写为
function r = MyFunc(x,type)
if strcmpi(type, 'random')
ind = numel(x);
getInd = @getIndRandom; % error here
else
ind = randi(numel(x), 1);
getInd = @getIndFixed;
end
x(getInd(ind)) = 1;
end
如果type
不是常数,则需要将所有内容移动到内部,否则为分支。