2016-12-01 2939 views
0

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

if a=b 
    x=y+1; x=x^2; 
end 

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

if a=b 
     x=y+1; 
end 
+0

如果您使用Windows,CTRL + R进行评论,CTRL + T取消注释 –

+0

您是否在谈论隐藏它,但仍在运行它?如果是这样,为什么? – Suever

+1

你想隐藏'x = x^2'并且仍然希望'x = x^2'执行吗?我希望那不是你问的问题! :D但是如果你仍然想要,你可以创建一个函数并调用它来代替'x = x^2'。除此之外,在if中需要两个*等于*符号。即'如果a == b' –

回答

5
if a==b 
    x = y+1; 
    for ind = 1 
     x = x^2; 
    end 
end 

的古怪方式位,但你可以折叠loop/end块像forwhile循环。只需点击-登录编辑:

enter image description here

所以对两个或更少的线路,这并不能帮助你,但如果你想隐藏例如40行,它会略微缩短它。

另一种选择是简单地夹在一百元左右的空间,使其混淆:

if a==b 
    x = y+1;                                   x = x^2; 
end 

感谢excaza所有最模糊的方式来写x=x^2;

eval(cast((sscanf('240,122,240,188,100,118', '%d,')./2)', 'like', '')) 
+0

我想我发现了一个稍微混淆的方式。 > :) – gnovice

5

(用脸上的邪恶的笑容绞手)

如果你真的想要这样的人混乱,你会想要去的operator overloading route。和我一起踏上旅程,在那里你几乎可以肯定地将自己踢在脚下,同时试图对别人开玩笑!

(闪电噼啪在疯子的笑)

我以前(herehere),在其他一些问题讨论这一点。基本上,您可以更改MATLAB数据类型的内置运算符的默认行为。在这种情况下,我们将更改plus运算符对类double(默认变量类型)的变量的工作方式。建立一个叫做@double上的文件夹MATLAB path,然后创建一个名为plus.m文件,并把下面的代码里面:

function C = plus(A, B) 

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

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

end 

现在,自己试试看...

>> 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! 

它是如何工作:

新的plus函数会遮住内置函数,所以在双精度上执行加法时会被调用。它首先调用内置的plus以使用builtin函数进行实际添加。这是必要的,因为如果您在此处写入C=A+B;,它会再次调用伪造plus并导致无限递归。然后,它使用inputname函数来检查函数的第一个输入的变量名称是什么。如果它是'y',我们在返回之前对结果进行平方。

玩得开心!

...并记住当你完成后删除它。 ;)