老问题,但 IMO,最简单的解决方案是使用evalc
function。请参阅下面的控制台会话,尝试直接使用打印结构时失败,尝试fprintf
使用输出时也会失败disp
,但使用时成功evalc
:
>> a = [1 2 3; 4 5 6]
a =
1 2 3
4 5 6
>> disp(whos('a'))
name: 'a'
size: [2 3]
bytes: 48
class: 'double'
global: 0
sparse: 0
complex: 0
nesting: [1×1 struct]
persistent: 0
>> fprintf('%s\n', whos('a'))
Error using fprintf
Function is not defined for 'struct' inputs.
>> fprintf('%s\n', disp(whos('a')))
Error using disp
Too many output arguments.
>> fprintf('%s\n', evalc('disp(whos(''a''))'))
name: 'a'
size: [2 3]
bytes: 48
class: 'double'
global: 0
sparse: 0
complex: 0
nesting: [1×1 struct]
persistent: 0
>>
evalc
在R2006a之前被引入Matlab,所以你应该没有兼容性问题。
只要确保您只使用该evalc
功能,如果您可以信任将用作输入的任何内容;EG 如果您允许evalc
从用户输入生成输入,则用户可能会输入恶意代码,EG 可能会运行系统命令,从而危及您 PC 上的文件等。但如果您evalc
在硬编码字符串上使用,则示例中为 EG上面evalc('disp(whos(''a''))')
,那你应该没问题。