用额外的参数调用 setter? - MATLAB
Posted
技术标签:
【中文标题】用额外的参数调用 setter? - MATLAB【英文标题】:calling setter with an extra argument? - MATLAB 【发布时间】:2012-10-03 19:01:23 【问题描述】:在具有依赖属性c
的类中,我想使用等于'a'
或'b'
的第三个参数调用c
的设置器,选择要更改的独立属性以设置@ 987654325@.
代码是
classdef test < handle
properties
a
b
end
properties (Dependent = true)
c
end
methods
function c = get.c(obj)
c = obj.a + obj.b;
end
function obj = set.c(obj, value, varargin)
if(nargin == 2)
obj.a = value - obj.b;
end
if(nargin == 3 && argin(3) == 'a') % how do I enter this loop?
obj.a = value - obj.b;
end
if(nargin == 3 && argin(3) == 'b') % or this?
obj.b = value - obj.a;
end
end
end
end
此调用有效:
myobject.c = 5
但是如何使用等于'a'
或'b'
的第三个参数调用setter?
【问题讨论】:
【参考方案1】:你不能。 set
总是只接受两个参数。您可以使用附加的依赖属性来解决它:
classdef test < handle
properties
a
b
end
properties (Dependent = true)
c
d
end
methods
function c = get.c(obj)
c = obj.a + obj.b;
end
function d = get.d(obj)
d = c;
end
function obj = set.c(obj, value)
obj.a = value - obj.b;
end
function obj = set.d(obj, value)
obj.b = value - obj.a;
end
end
end
或通过选择不同的语法和/或方法:
myObject.set_c(5,'a') %// easiest; just use a function
myObject.c = 5, 'b' %// easy; error-checking will be the majority of the code
myObject.c('a') = 5 %// hard; override subsref/subsasgn; good luck with that
或其他有创意的东西:)
【讨论】:
如果你覆盖 subsref ,你也许可以做到这一点 @janh: 但是你不能使用像myObject.c = 5
这样的语法,你必须做一些非标准的,也许是不直观的,比如myObject.c('a') = 5
afaik 你不能覆盖set.c(obj)
Matlab 不允许这样做。但是,正如您所指出的,您可以覆盖 subsref 以模仿 set.c(obj, value)
。是的,你仍然需要像myObject.c = 5, 'b'
这样的东西。我使用 myObject.set_c
来解决 Matlab 不允许在子类中覆盖 getter 的问题。话虽如此,对象需要重构;)以上是关于用额外的参数调用 setter? - MATLAB的主要内容,如果未能解决你的问题,请参考以下文章
调用 JSONSerialization.JSONObjectWithData 时调用中的额外参数 [重复]