为什么MATLAB函数句柄中不显示预定义变量的实际取值?
结论
这是MATLAB的正常设计机制,并非BUG。
原理说明
MATLAB的匿名函数在定义时会自动捕获当前工作区的变量值,存储在函数句柄的专属工作区中。你可以自行验证:定义完g之后修改y为其他值,调用g(1)得到的结果依然是2,不会受y的修改影响,证明y的值已经被正确捕获到函数句柄内。
MATLAB显示匿名函数表达式时,默认保留编写时的原始语法,不会自动把捕获的变量替换为对应常量值,该设计的目的是让表达式和编写的代码保持一致,方便回溯逻辑。
补充:你预期的
@(x)f.*2存在语法问题,f是函数句柄,必须传入参数调用f(x)才能得到计算值,合法的预期显示结果应为@(x)f(x).*2。
实现常量替换显示的方法
如果需要让定义的匿名函数直接显示常量值,可通过字符串拼接后转函数句柄的方式实现,示例代码如下:
f = @(x) x.^2; y = 2; % 拼接表达式字符串后转换为函数句柄 g = str2func(sprintf('@(x) f(x).*%d', y));
此时输出g即可得到目标显示效果:
g = function_handle with value: @(x)f(x).*2
内容的提问来源于stack exchange,提问作者Matt Majic
相关产品推荐
相关产品推荐

