【发布时间】:2018-03-22 10:34:29
【问题描述】:
我有一个对象被实例化为类NIRFlex,它继承自serial 类。当我尝试从命令行为属性Text_mode 赋值0 时:
>> N.Text_mode = 0
我收到以下错误:
Error using serial/subsasgn (line 146)
The name 'Text_mode' is not an accessible property for an instance of class 'serial port objects'.
我的类定义、构造函数、set方法如下:
classdef NIRFlex < serial
properties
Text_mode
end
methods
function obj = NIRFlex(port)
obj = obj@serial(port);
end
function obj = set.Text_mode(obj,mode)
if (mode == 1)||(mode == 2)
obj.Text_mode = mode;
else
error('Invalid Text Mode');
end
end
end
end
如果我删除set 方法,我可以在命令行中为Text_mode 属性分配任意值,但我需要确保输入的值仅为1 或2。
我查看了@MathWorks 的Subclasses of Built-In Types with Properties 文档,但找不到答案。
【问题讨论】:
-
有趣的是,实际上是
error命令产生了该错误。有趣的。删除error命令或将其替换为任何其他命令将使代码正常工作。此参考 mathworks.com/help/matlab/matlab_oop/… 涵盖了具有“if-else-error”结构但仅适用于非继承类的属性集方法。 -
@Yvon 这很奇怪。我删除了
error命令,它似乎工作正常。如果我用一个简单的disp()命令替换error,只要传递给set 方法的参数是数字,那么一切正常,否则返回相同的错误。我彻底迷惑了! -
如果设置断点并查看引发错误的代码 (
subsasgn),无论在 set 方法中生成什么错误,都会有一个 try-catch 块抛出该错误消息.基本上你的错误信息被提升到了 catch 块。
标签: matlab runtime-error subclass setter matlab-class