【问题标题】:passing a colon as argument of a function in matlab在matlab中将冒号作为函数的参数传递
【发布时间】:2026-01-14 18:55:02
【问题描述】:

我想知道是否可以使用 冒号 ":" 作为函数的参数。

类似的东西:

function  y=func(x)
  if x is a colon
    do this
  else
    do that
  end

也可以将关键工作 end 作为函数的参数传递,也可以将 1:end3:end-5 > 等等…… 我怀疑这是否可能,但我想确定一下。

另外,当我将“1:end”作为函数的参数传递时,我得到一个奇怪的错误,它不会产生错误,但在函数内部,没有分配任何参数(甚至没有分配其他参数)。有人知道会发生什么吗?

【问题讨论】:

  • 我不确定您是否真的需要这样做。多说一点你想要达到的目标。您当然可以将冒号作为字符串 if x == ":" ... 传递,end 可以通过使用 size 找到并作为数字传递。
  • 是的,将它作为字符串传递将是一个很好的解决方法......好主意。
  • 这就是调用重载运算符() 内部发生的情况:如果调用x(:): 将作为字符串':' 进入subsref 或subsasgn。所以看起来很合理。使用ischar(x) && isequal(x, ':') 而不是==== 将在大小差异上引发错误,并产生误报:== 进行隐式类型转换,因此 58 == ':' 为真。

标签: matlab syntax


【解决方案1】:

您可以为自己的类覆盖两者:

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

至于功能,我从来没有听说过这样的功能。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 如果可能的话,我可以给它我想要的感觉。这将是“参数运算符”的某种重载。
    最近更新 更多