【问题标题】:How to accept multiple argument types in a Matlab function validator?如何在 Matlab 函数验证器中接受多个参数类型?
【发布时间】:2019-10-23 23:49:24
【问题描述】:

我有一个特定的函数,比如myFunc,它有一个参数,比如funcHandleArg,它应该是一个function_handle 实例。但是,这个参数不限于一个function_handle,实际上可能是一组function_handles。因为 Matlab 不接受函数句柄 [func_handle1, func_handle2] 的非标量数组,所以我必须将此参数作为 function_handles {func_handle1, func_handle2} 的元胞数组传递。

现在,我的问题是,我如何确保 both funcHandleArg = func_handle1funcHandleArg = {func_handle1, func_handle2}验证并接受 作为输入参数。总结一下,我想要这样的东西:

function output = myFunc(funcHandleArg, someOtherStuff)
arguments
    funcHandleArg function_handle "AND cells of function_handles"
    someOtherStuff otherStuff
end
output = someFunctionOf(funcHandleArg, someOtherStuff)
end 

【问题讨论】:

  • 您可以使用iscellisa(funcHandleArg,'function_handle') 来确定您拥有的变量类型。
  • 我明白你的意思,定义一些验证器函数我可以验证我的参数是cell 还是function_handle。但是,这并不能解决我的问题,因为:1) 我不检查我的论点是否是function_handles 的单元格 2) 我没有简单的单行在arguments 块中。

标签: matlab function validation


【解决方案1】:

你可以像这样编写一个简单的验证函数:

function myFunc(fcnOrFcns, otherArgs)
arguments
    fcnOrFcns {isOneOrMoreFunction}
    otherArgs
end
celldisp({fcnOrFcns, otherArgs});
end

function isOneOrMoreFunction(f)
isFcn = @(f) isa(f, 'function_handle');
assert(isFcn(f) || (iscell(f) && all(cellfun(isFcn, f))));
end

【讨论】:

  • 谢谢,这确实回答了我的问题。我希望有一个更简单的单行,但我猜 Matlab 语法不允许这样做。
猜你喜欢
  • 2017-09-28
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
相关资源
最近更新 更多