在Matlab中将冒号作为函数参数传递

7
我想知道是否可以将冒号“:”用作函数参数。例如:
function  y=func(x)
  if x is a colon
    do this
  else
    do that
  end

此外,是否可能将关键词end作为函数参数传递,以及1:end3:end-5等呢?我怀疑这是不可能的,但我想确定一下。
此外,当我将"1:end"作为函数参数传递时,会出现奇怪的错误,它不会产生错误,但在函数内部,没有分配任何参数(甚至是其他参数)。 有人知道发生了什么吗?

1
我不确定你是否真的需要这样做。请详细说明你想要实现什么。你可以将冒号作为字符串传递,例如 if x == ":" ...,可以使用 size 找到 end 并将其作为数字传递。 - oleksii
是的,将其作为字符串传递将是一个不错的解决方法...好主意。 - Oli
5
在调用重载运算符()时会发生的情况是:如果你调用x(:),则:会以字符串':'的形式出现在subsrefsubsasgn中。因此,使用ischar(x) && isequal(x, ':')比使用==更为合理。==会在大小不同的情况下抛出错误,并产生误报:==会进行隐式类型转换,因此58 == ':'为真。 - Andrew Janke
2个回答

7
您可以覆盖自己类的两个部分:
classdef MyClass

properties(Access=public)
    data
end

methods
    function out = end(A,k,n)
         disp(A);
         disp(k);
         disp(n);
         out = [];
    end 

    function B = subsref(A,S)            
        disp(S);
        B = [];
    end
end
end

关于功能,我从未听说过这样的功能。

0

不,无法将冒号作为参数传递(这没有任何意义)。


1
如果可能的话,我可以赋予它我想要的意义。这将是一种“参数运算符”的某种重载。 - Oli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接