【发布时间】:2026-02-17 14:05:01
【问题描述】:
在什么情况下可以将文字 : 传递给 Matlab 函数?我通过实验发现,有时,文字 : 作为字符串 ':' 传递,但在其他情况下,会引发错误。例如:
>> type writeargs
function writeargs(varargin)
disp(varargin);
end
>> writeargs(:)
Undefined variable writeargs.
>> writeargs(:, 1)
Undefined variable writeargs.
>> writeargs(:, 1, :)
':' [1] ':'
>> writeargs(:, :, :)
':' ':' ':'
>> writeargs(1, 2, :, 4, 5)
[1] [2] ':' [4] [5]
>> writeargs(1, 2, :, end)
Error using writeargs
Too many output arguments.
我的印象是,如果至少传递了三个参数,则允许使用此语法。 这似乎是任意的。这里的合法语法是什么?
编辑:要求用例的评论。一个用例可能是每当我的参数将用作切片或索引时。在 Python 代码中,我遇到过将切片对象传递给方法的情况。一个用例是一个受this answer启发的函数,其中一个小函数用于绕过Matlabs无法解释magic(5)(3, :),并且可以编写一个辅助函数并用paren(magic(5), 3, :)调用它。
【问题讨论】:
-
您在寻找 MATLAB 错误吗?
writeargs是一个函数,而不是矩阵。为什么要指定冒号作为参数? -
@EitanT 每当我的参数将用作切片或索引时。例如,我有一个函数
y = p(x, varargin)定义为y = x(varargin{:});,灵感来自this answer,当我的函数调用确实是Matlab 中缺少magic(5)(3, :)的一种解决方法时,最好将:直接传递为在p(magic(5), 3, :). -
很有趣,但您应该在问题本身中指定这一点。无论如何,您应该看到this related question 的答案...我相信您正在寻找的答案是您不能将
:传递给函数,但可以传递给对象(类)。或者,您可以传递一个冒号字符 (':'),但这可能不是您想要的。 -
@EitanT 我已经编辑了这个问题。感谢您提供相关问题的指针。
-
@gerrit 我在想
:的某种组合会欺骗matlab 为名为@987654340@ 的变量调用subsref,而不是调用你的函数。