以下是Matlab控制台的输出。两个字符串都相同:'@TBMA3'
。然而,Matlab的strcmp
函数在比较它们时会返回0
。为什么?
K>> str='@TBMA3'
str =
@TBMA3
K>> method.fhandle
ans =
@TBMA3
K>> strcmp(method.fhandle, str)
ans =
0
答案 0 :(得分:8)
最可能的原因是method.fhandle
不是字符串,而是函数句柄。检查class(method.fhandle)
是否给出了
ans =
function_handle
在这种情况下,比较会给出0
,因为字符串(str
)不能等于函数句柄(method.fhandle
)。
为了检查是否相等,您需要将method.fhandle
转换为字符串,或将str
转换为函数句柄。第一个选项不合适,因为char(function_handle)
会提供'TBMS3'
,而不会'@'
。因此,请使用第二个选项,并使用isequal
进行比较:
isequal(method.fhandle, str2func(str))
应该给1
。†
†此isequal
比较有效,因为method.fhandle
和str2func(str)
都指向同一个已定义的函数TBMA3
。与提供f = @(x)x; g = @(x)x, isequal(f,g)
的{{1}}进行比较。此行为是explained in the documentation。感谢@knedlsepp帮助澄清这一点。功能