我定义了两个类:库和书。图书馆有名字和书籍。书有一个名字和一个作者。我在库类中有一个方法,它将书添加到库中。它们如下
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: []
非常感谢任何帮助。
答案 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