将项添加到matlab类

时间:2016-08-26 11:28:56

标签: matlab class

我定义了两个类:库和书。图书馆有名字和书籍。书有一个名字和一个作者。我在库类中有一个方法,它将书添加到库中。它们如下

classdef library
properties
    name
    books=book.empty
end
methods 
    function self=library(val1)
    self.name=val1;
    end
    function addbook(self,item)
        self.books(end+1)=item;
    end
end 

和书

classdef book
    properties 
        author
        title
    end
    methods
        function self=book(val1,val2)
            self.author=val1;
            self.title=val2;
        end
    end    
end

现在我定义

lib1=library('Leib')

book1=book('A','T')

当我想使用我的addbook方法将这本书添加到我的库中时,它并没有被破坏。图书馆保持空白

lib1.addbook(book1)

lib1 = 

  library with properties:

     name: 'Leib'
    books: []

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

在Matlab中,对象(默认情况下)不是引用。这意味着您需要显式返回并设置对象的副本。

function newLib = addbook(self,item)
    self.books(end+1)=item;
    newLib = self;
end

然后:

lib2 = lib1.addbook(book1);

应该注意的是,lib1和lib2是具有相同类的不同的对象,即通过调用addbook返回带有修改的lib1副本。如果您希望引用对象行为,则从句柄类继承子类。

答案 1 :(得分:0)

首先你的addbook方法有错误 - 它没有返回自己,即

function self = addbook(self,item)
  self.books(end+1)=item;
end

您还会看到句柄类或值类之间的区别,请参阅here for mathworks explanation

要解决它:

 lib1 = lib1.addbook(book1);

或更改您的库类以从句柄类派生

classdef library < handle
   ...
end