Matlab 重现函数

Matlab repr function

在 Matlab 中,可以使用 eval 函数将任意字符串计算为代码。例如

s = '{1, 2, ''hello''}'  % char
c = eval(s)              % cell

有什么方法可以进行逆运算吗?获取任意变量的文字字符串表示形式?即从c恢复s? 像

s = repr(c)

这样的 repr 函数内置于 Python 中,但我在 Matlab 中没有遇到过类似的东西,我也没有看到如何自己实现它的明确方法。

我所知道的最接近的东西是像 disp(c) 这样的东西,它打印出 c 的表示形式,但是以 "readable" 格式而不是文字代码格式。

好的,我看到你的痛苦了。

我的建议仍然是提供一种 toString 的功能,利用 fprintfsprint 和朋友,但我知道如果你这样做可能会很乏味不知道数据的类型,也需要几个子案例。

为了快速修复,您可以将 evalc 与您提到的 disp 函数结合使用。

像这样的东西应该可以工作:

function out = repr(x)
    out = evalc('disp(x)'); 
end

或者简明扼要

repr = @(x) evalc('disp(x)');

Matlab 中最接近的是 mat2str,它适用于 数字、字符或逻辑二维数组 (包括向量)。 (它不适用于 ND 数组、元胞数组、结构数组或表)。

示例:

>> a = [1 2; 3 4]; ar = mat2str(a), isequal(eval(ar), a)
ar =
    '[1 2;3 4]'
ans =
  logical
   1

>> a = ['abc'; 'def']; ar = mat2str(a), isequal(eval(ar), a)
ar =
    '['abc';'def']'
ans =
  logical
   1

在此你可以看到:

  • 我编写的一个函数,用于获取具有任意嵌套单元格、数字、字符或逻辑数组的二维单元格数组的字符串表示形式。
  • 如何在 Octave 中为任意数据类型做您想做的事。

具体取决于您要执行此操作的原因,您的用例可能会通过 matlab.io.saveVariablesToScript

得到解决

Here 是它的文档。

希望对您有所帮助!