kin*_*ull 4 oop matlab matlab-class
我来自Java背景.我在Matlab中遇到类问题,尤其是getter和setter.得到一条消息说句柄和价值类之间的冲突我有点迷失了什么,所以任何缺乏更好的单词的帮助都会有所帮助.
classdef Person
properties(Access = private)
name;
age;
end
methods
% class constructor
function obj = Person(age,name)
obj.age = age;
obj.name = name;
end
%getters
function name = get.name(obj)
end
function age = get.age(obj)
end
%setters
function value = set.name(obj,name)
end
function value = set.age(obj,age)
end
end
Run Code Online (Sandbox Code Playgroud)
结束
由于您的类当前是默认Value类的子类,因此您的setter需要返回修改后的对象:
function obj = set.name(obj,name)
end
function obj = set.age(obj,age)
end
Run Code Online (Sandbox Code Playgroud)
从文档中:"如果将[值类]传递给函数,函数必须返回修改后的对象." 并特别:"在价值类,方法......那修改的对象必须返回修改的对象在现有对象变量复制".
句柄classes(classdef Person < handle)不需要返回修改后的对象(如返回void):
function [] = set.name(obj,name)
end
function [] = set.age(obj,age)
end
Run Code Online (Sandbox Code Playgroud)
更深入一点,Value类和Handle类之间的区别主要在于赋值:
Mathworks 在这个主题上有一个很好的概述.为了解释他们的插图,Value类的行为是
% p is an instance of Polynomial
p = Polynomial();
% p2 is also an instance of Polynomial with p's state at assignment
p2 = p;
Run Code Online (Sandbox Code Playgroud)
和Handle类是
% db is an instance of Database
db = Database();
% db2 is a reference to the db instance
db2 = db;
Run Code Online (Sandbox Code Playgroud)