调用类方法 - 输入参数太多

时间:2014-12-05 09:05:16

标签: matlab

我创建了一个简单的类来尝试在MATLAB中学习更多关于类的内容

以下是我的课程。

classdef ClassTest < handle

methods             
   function t1 = testone(numOne, numTwo)
      t1 = t2(numOne, numTwo); 
   end

   function t2 = testtwo(numOne, numTwo)
       t2 = numOne / numTwo;
   end
end

end

所以我使用下面的代码行创建了我的类的实例。

myClass = ClassTest;

然后我用下面的行调用函数testone。

v = myClass.testone(20,5);

但是得到错误消息“使用ClassTest / testone输出参数太多错误。”我不明白这个?

我试着把5分掉了,它实际上到了第t1 = t2行(numOne,numTwo),但是后来却没有认识到我发现令人惊讶的函数t2?不跟踪这里发生了什么?

更新

如果我使方法变为静态,我不再得到关于存在许多输入参数的错误消息,但是当从testone函数调用它时它不能识别testtwo函数,除非我把ClassTest.testtwo。对我来说仍然很奇怪

解决方案

在我玩这个游戏时,我现在已经开始使用代码,但不确定我是否完全了解正在发生的事情。

这两个函数应如下所示,

   function t1 = testone(obj, numOne, numTwo)
      t1 = obj.testtwo(numOne, numTwo);           
   end

   function t2 = testtwo(obj, numOne, numTwo)
       t2 = numOne / numTwo;
   end

2 个答案:

答案 0 :(得分:1)

如果您希望方法是类的静态方法,那么在方法块中定义它们如下:

methods (Static)

然后,您需要使用类名t1 = ClassTest.testone(20,5)t2 = ClassTest.testtwo(20,5)来调用它们。

如果您希望它们成为类的方法,那么通常使用以下签名定义它们:

function t1 = testone(obj, numOne, numTwo)

然后,您可以使用myClass = ClassTest创建该班级的实例,并致电t1 = myClass.testone(20,5)

对象myClass作为第一个参数传递给方法(我总是使用名称obj作为第一个参数,但是其他人使用诸如this之类的东西,类似于Java约定),然后在整个方法代码中可用。

答案 1 :(得分:0)

这可能与matlab如何加载类有关。如果你已经在内存中有myClass然后你创建/修改函数定义,你可能会收到错误。

以下是有关matlab如何处理更新类的更多详细信息:http://www.mathworks.com/help/matlab/matlab_oop/modifying-and-reloading-classes.html

尝试从内存中清除所有变量(并作为最后的手段重新启动matlab),然后重试。