subsref works as not expected

5 ビュー (過去 30 日間)
Sergey Kasyanov
Sergey Kasyanov 2021 年 1 月 12 日
コメント済み: Sergey Kasyanov 2021 年 1 月 12 日
Hello!
Let's create random cell array.
test = {1,2,3,4};
And try to evaluate simple code
res_1 = ones(subsref(test, substruct('{}', {':',':'})));
res_2 = ones(test{:, :});
Results unmatch but it should to match according with subsref help. Why?
Is there any way to unpack cell array without direct access through {:}?

採用された回答

Bruno Luong
Bruno Luong 2021 年 1 月 12 日
編集済み: Bruno Luong 2021 年 1 月 12 日
I knew it for sometime: subsref never work to emulate comma list (not sure if it's documented), because a non trivial comma list (with length > 1) can never be considered as function output .
This limitation surely deserves to be in "what frustrates you ..." thread.
  3 件のコメント
Bruno Luong
Bruno Luong 2021 年 1 月 12 日
編集済み: Bruno Luong 2021 年 1 月 12 日
First MATLAB won't allow such cascade syntax (this deserves to be "what frustrates you ..." thread as well)
some_function(var_1, var_2){:}
Example:
>> num2cell(1:3)
ans =
1×3 cell array
{[1]} {[2]} {[3]}
>> num2cell(1:3){:}
Error: Indexing with parentheses '()' must appear as the last operation of a valid indexing expression.
The best you can do is this
A = rand(3,4,5)
idx = some_function(1:2,3:4,':');
B = A(idx{:})
function c = some_function (varargin)
c = varargin;
end
But then the function some_function is not useful in any way. Just work directly with cell and comma list will do the same job:
A = rand(3,4,5)
idx = {1:2,3:4,':'};
B = A(idx{:})
Sergey Kasyanov
Sergey Kasyanov 2021 年 1 月 12 日
Thanks!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLanguage Support についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by