2016-12-01 2949 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',我們在返回之前對結果進行平方。

玩得開心!

...並記住當你完成後刪除它。 ;)