在MATLAB中隐藏代码行

Dim*_*sis 0 matlab

我想知道如果有可能以及如何在MATLAB中隐藏一行代码或整行代码.例如:

if a=b
   x=y+1; x=x^2;
end
Run Code Online (Sandbox Code Playgroud)

并且隐藏了x = x ^ 2,但仍然运行该过程.我的意思是:

if a=b
       x=y+1; 
end
Run Code Online (Sandbox Code Playgroud)

gno*_*ice 6

(脸上带着邪恶的笑容绞着手)

如果你真的想弄乱这样的人,那么你就会想要让运营商超载路线.和我一起踏上一段旅程,你几乎肯定会在尝试与别人开玩笑的时候拍自己的脚!

(一个疯子的笑声闪电般的闪电)

我之前(在这里这里)已经在其他一些问题中讨论了这个问题.基本上,您可以更改MATLAB数据类型的内置运算符的默认行为.在这种情况下,我们将更改plus运算符对类double的变量(默认变量类型)的工作方式.@doubleMATLAB路径上创建一个文件夹,然后创建一个名为的文件plus.m并将以下代码放入其中:

function C = plus(A, B)

  C = builtin('plus', A, B);

  if strcmp(inputname(1), 'y')
    C = C.^2;
  end

end
Run Code Online (Sandbox Code Playgroud)

现在,亲自试试......

>> y=1;   % Initialize y
>> x=y+1
x =
     4    % Wait a minute...
>> x=1+1
x =
     2    % OK
>> x=1+y
x =
     2    % OK
>> x=y+1
x =
     4    % What?!
>> x=y+2;
x = 
     9    % No!!
>> y=3;
>> x=y+1
x =
    16    % Oh noes! I've been hax0red!!11!1!
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

plus函数会影响内置函数,因此在对双精度执行加法时会调用它.它首先plus使用builtin函数调用内置函数进行实际添加.这是必要的,因为如果你在C=A+B;这里写的话,它会plus再次调用假冒并导致无限递归.然后,它使用该inputname函数来检查函数的第一个输入的变量名是什么.如果是'y',我们在返回之前对结果进行平方.

玩得开心!!!

......记得在你完成后删除它.;)


Adr*_*aan 5

if a==b
    x = y+1;
    for ind = 1
        x = x^2;
    end
end
Run Code Online (Sandbox Code Playgroud)

有点古怪的方式,但你可以坍塌loop/endforwhile循环.只需单击-编辑器中的符号:

在此输入图像描述

因此,对于两条或更少的线条,这对您没有帮助,但如果您想要隐藏例如40条线条,则会明显缩短它.

另一种选择是简单地将卡片放入大约一百个空间并使其混淆:

if a==b
    x = y+1;                                                                                                                                          x = x^2;
end
Run Code Online (Sandbox Code Playgroud)

感谢excaza最模糊的写作方式x=x^2;:

eval(cast((sscanf('240,122,240,188,100,118', '%d,')./2)', 'like', ''))
Run Code Online (Sandbox Code Playgroud)