2015-09-04 82 views
2

我的代碼來設置單元陣列,以虛假的第一列下面的行,因此它可以被用於在uitable複選框:MATLAB使用冒號運算符與細胞分配

result{:,1} = false; 

它跑預期很多次,但看似隨意扔了這個錯誤:

The right hand side of this assignment has too few values 
to satisfy the left hand side. 

我最終改變了線路:

result(:,1) = {false}; 

,它似乎像以前一樣工作。

第一種方式不應該有什麼原因嗎?或者爲什麼它會工作一段時間然後停止?

+0

關於索引的有趣的問題! –

回答

2

你原線

result{:,1} = false; 

會工作,如果result有一列,但如果它沒有幾行。所以我的猜測是,它起初工作,因爲result有一行,但停止工作,因爲result獲得新行

這是爲什麼?

如果result有單排,聲明result{:,1} = false;相同result{1,1} = false;,那就是「設置的resultfalse左上角單元格的內容」,這是罰款。但是,如果result具有n行,則語句result{:,1} = false;的左側是n單元的內容的comma-separated list您無法將單個分配給若干個單元'內容。 Matlab不會自動複製該值,並將其作爲所有單元格的內容。

一種解決方法是告訴MATLAB使用deal(它有效地「交易」這個值的所有左側「接收器」),這樣做的複製:

result{:,1} = deal(false); 

當然,這也適用,如果有是單排。

另一種可能是使用,像你一樣,

result(:,1) = {false}; 

這意味着「使所有細胞的result等於含false細胞的第一列」。注意與前面的情況的區別:現在我們是單元格分配給幾個單元格。 Matlab對此感到滿意,並自動複製右邊的單元格。再次,這也適用於單行作爲特定情況。