【问题标题】:MATLAB - Can I make my handle object behave like a graphics handle?MATLAB - 我可以让我的句柄对象表现得像一个图形句柄吗?
【发布时间】:2013-07-04 12:27:52
【问题描述】:

使用图形句柄,您可以这样做:

>> a = nan(1,5)

a =
   NaN   NaN   NaN   NaN   NaN

>> a(3) = line([1 2],[1 2])

a =
       NaN       NaN    0.0042       NaN       NaN

>> find(~isnan(a),1,'first')

ans =
     3

如果这是使用普通句柄派生类完成的,则会发生此错误:

>> a(3) = MyObject(1,1,1)
The following error occurred converting from MyObject to double:
Error using double
Conversion to double from MyObject is not possible.

据我所知,图形句柄只是双打。自定义对象也可以这样吗?

【问题讨论】:

  • 这些帖子没有回答我要问的问题,这与能够找到(~isnan(x))有关
  • @BBrock:也许我发布的单元格数组示例可以提供帮助,您可以使用 ~cellfun(@isempty, a) 而不是 ISNAN 来测试非空单元格
  • @Amro:感谢您的建议——我知道我可以为此目的使用元胞数组,但是拥有与图形句柄提供的功能相同的功能对我来说特别方便...所以我现在有点猜测这是不可能的?
  • @BBrock:恐怕这是不可能的,你不能让你的类将对象作为数字句柄返回。您应该知道,句柄图形 (HG) 不是使用已记录的 MCOS 类系统实现的,而是使用较旧且完全未记录的 UDD 类:undocumentedmatlab.com/blog/introduction-to-udd

标签: arrays matlab oop object handle


【解决方案1】:

例子:

MyObject.m

classdef MyObject < handle
    properties
        x
    end
    methods
        function obj = MyObject(x)
            if nargin < 1, x = NaN; end
            obj.x = x;
        end
    end
end

MATLAB

>> a = MyObject.empty(0,3)
a = 
  0x3 MyObject array with properties:

    x

>> a(3) = MyObject(10)
a = 
  1x3 MyObject array with properties:

    x

>> a(3)
ans = 
  MyObject with properties:

    x: 10
>> a(1)
ans = 
  MyObject with properties:

    x: NaN

请注意,对象a(1:2) 是通过调用不带参数的默认构造函数构造的。

另一种方式:

>> a = cell(1,3)
a = 
    []    []    []
>> a{3} = MyObject(10)
a = 
    []    []    [1x1 MyObject]

注意:处理图形 (HG) 不是使用已记录的 MCOS 类系统实现的,而是使用较旧且完全未记录的 UDD 类。

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多