用额外的参数调用 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 时调用中的额外参数 [重复]

Matlab调用不带括号的函数

Matlab:将更多参数传递给`nlinfit`函数

matlab里面的function的输入参数有函数怎么调用?

谁知道怎么用matlab调用lingo

python中@property@setter和@deleter