我创建了一个简单的类来尝试在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
答案 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),然后重试。