【问题标题】:In MATLAB classdef, can you define an "any_function"?在 MATLAB classdef 中,你能定义一个“any_function”吗?
【发布时间】:2015-09-21 12:00:56
【问题描述】:

在 MATLAB 的 classdef 中,您能否定义一个方法来执行调用它的 any_function

例如,假设我在 MATLAB 中定义了这个自定义类类型:

classdef custfloat

    properties
      value = double(0);   % Double value
    end

    methods


        function obj = custfloat(v, ex, mant)

            obj.value = ........blah blah blah;
        end


        function v = any_function(arg1,arg2)

            v = any_function(arg1.value, arg2.value);
        end

    end
end

所以只要any_function 被定义为两个双打,它就可以工作,不管any_function 实际上是什么。

这有意义吗?

【问题讨论】:

  • 我不明白这个问题。
  • 我也不明白这个问题。您能否提供一个示例,说明如何在实践中使用 any_function 方法以及任何预期的输出或行为?

标签: matlab class object methods


【解决方案1】:

我不确定你的问题到底是什么意思,但我认为你可以得到你正在寻找的东西,我只是子类化double

例如,这是一个简单的类,它扩展 double 以创建类似于 double 的东西,但也有一个单位(例如米或秒)。

classdef custDouble < double

    properties

        unit

    end

    methods

        function obj = custDouble(v, u)
            % Do something with exponents and mantissas instead if you like,
            % I can't remember floating point stuff well enough for this
            % example
            obj = obj@double(v);
            obj.unit = u;
        end

        function val = myExtraMethod(obj)

            val = custDouble(obj*2, obj.unit);

        end

    end

end

您现在可以像这样创建custDouble

>>a = custDouble(2, 'm')
a = 
  custDouble with properties:

    unit: 'm'
  double data:
     2

你可以调用你的额外方法:

>> b=a.myExtraMethod
b = 
  custDouble with properties:

    unit: 'm'
  double data:
     4

你可以调用任何适用于双打的常规函数​​:

>> sqrt(a)
ans =
       1.4142

但请注意,这里的sqrt 将返回double,而不是custDouble - 它只是作用于底层double。如果您希望像sqrt 这样的常规函数​​返回custDouble,则需要使用custDouble 上的方法重载它们,该方法将以适当的方式运行(例如,调用builtin('sqrt',...)底层double,然后构造正确的单元,然后将它们组合成一个custDouble——就像上面的myExtraMethod一样)。

在文档中搜索“子类化 MATLAB 内置类型”以获取更多信息。

【讨论】:

  • 不错的简单子类化示例,它给了我很多想法。谢谢:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2011-04-30
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
相关资源
最近更新 更多