matlab - 常量属性中方法的函数句柄

标签 matlab oop anonymous-function handle

在 R2018b 中,我有以下设置:

classdef SomeClass < handle    
    methods
        function SomeMethod(obj)
            disp in!
        end
    end    
end

classdef SomeOtherClass < handle

    properties (Constant)
        instance = SomeClass()
    end

    methods
        function Test(obj)
            hdl = @obj.instance.SomeMethod;
            hdl();            
        end
    end

end

但是,运行 Test() 方法会报错:

>> SomeOtherClass().Test() 
Undefined function or variable 'obj.instance.SomeMethod'.

Test() 方法更改为:

function Test(obj)
    A   = obj.instance;
    hdl = @A.SomeMethod;
    hdl();
end

给出了想要的结果:

>> SomeOtherClass().Test
in!

我很困惑...为什么我需要中间人 A

最佳答案

根据@gnovice 的发现:

>> obj = struct('instance', SomeClass());
>> hdl = @obj.instance.SomeMethod
hdl =
  function_handle with value:
    @obj.instance.SomeMethod

>> hdl(obj.instance)
Undefined function or variable 'obj.instance.SomeMethod'.

>> hdl()
Undefined function or variable 'obj.instance.SomeMethod'.

但是:

>> instance=SomeClass();
>> hdl = @instance.SomeMethod
hdl =
  function_handle with value:
    @(varargin)instance.SomeMethod(varargin{:})

>> hdl(instance)
Error using SomeClass/SomeMethod
Too many input arguments.

Error in @(varargin)instance.SomeMethod(varargin{:})

>> hdl()
in!

请注意在第二种情况下创建的函数句柄实际上是一个匿名函数,其中包含对象。这是 @ 运算符的特例,不是正常用法,它是:

>> hdl=@SomeMethod
hdl =
  function_handle with value:
    @SomeMethod

>> hdl(instance)
in!

这个案例实际上做的是创建一个匿名函数,该函数嵌入了您打算对其调用此方法的对象。您可以通过这种方式创建这样的函数:

>> hdl=@()obj.instance.SomeMethod()
hdl =
  function_handle with value:
    @()obj.instance.SomeMethod()

>> hdl()
in!

关于matlab - 常量属性中方法的函数句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52863129/

相关文章:

java - 在 Java 中重写私有(private)方法对代码输出没有影响。为什么?

oop - 命令设计模式中的业务逻辑

.net - TypeOf子类的设计模式

php - PHP 5.3.0 之前的匿名函数

javascript - 如何在javascript匿名函数中调用类slibing函数

matlab - 在匿名函数内联中将 NaN 设置为零

matlab - 如何从matlab中的单元格中提取数字?

image - 对于类型为 'conv2' 和属性为 'double' 的输入参数,未定义函数 'full 3d real'。 - Matlab

matlab - 从 3 个向量创建等高线图

matlab - 在圆形颜色图中插入阴影