问题标签 [matlab-class]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1895 浏览

matlab - matlab中类库的全局变量

matlab声明了几个类。我如何声明在所有类中都可以看到的常量?
例如:这些常量可以是在所有类的方法中使用的物理常量。首先想到的是使用全局变量。有没有更好的办法?在单独的文件中声明这些常量会很好。

0 投票
3 回答
1479 浏览

matlab - 我什么时候可以传递函数句柄?

我有一个缓存评估的功能。作为参数之一,它需要一个函数句柄。在某些情况下,函数句柄是不可访问的,我不太明白为什么。下面的示例显示了让我难过的原因:

所以,如果我有一个存储为结构成员的函数句柄,如果它是一层深,我可以很好地传递它,但如果它是两层深则不行。在我的真实用例中,我有一个结构D,其中包含许多(117)个不同类的实例,所以我实际上有stct.obj.meth, wherestct是一个结构,obj是一个类实例/对象,meth是一个方法。传递@stct.obj.meth失败,但如果我分配A = stct.obj,则传递@A.meth成功。

在什么情况下我可以将函数句柄作为参数传递,以便它仍然可以在堆栈中访问?


编辑:虽然在上面的用例中,我可以简单地删除@因为@plus已经是一个函数句柄。但是,请考虑这里的情况:

在这种情况下,我需要之前...@A.a.mymeth

0 投票
2 回答
450 浏览

matlab - 类方法的输入参数过多错误

我在 MATLAB 中编写了一个类,如下所示:

当我使用这个类的getSize函数时,它总是报如下错误:

有谁知道为什么?

0 投票
2 回答
3224 浏览

matlab - 如何在 MATLAB 中创建一组抽象类对象?

例如,假设我创建了一个名为的抽象类Shape和两个名为的子类CircleRectangle它们都实现了一个名为Draw. 我希望能够创建多个CircleRectangle对象,将它们存储在一个数组中,并Draw通过遍历数组来调用每个数组对象。

我尝试过类似以下的方法:

形状.m:

圆.m:

矩形.m:

测试.m:

当我尝试运行 test.m 时,我收到以下错误消息:

0 投票
1 回答
1568 浏览

matlab - 使用 set 方法 MATLAB

我想从同一 matlab 类中的函数更改 Matlab 类中属性的值。即类中的一个函数正在生成一个我想要分配给该类的属性的值。

这是该类的属性:

.....这就是set方法。

现在我想写一些类似的东西:

从另一个函数更新 detTP 属性的值。

我该怎么做?set函数应该怎么写(即现在写对了吗)?以及将新值分配给属性的语法应该如何。

在此先感谢您的帮助!

0 投票
2 回答
82 浏览

matlab - 对象不持久

在下面这段代码中,类的析构TdcTestResult函数在函数结束时被调用add,所以方法变量mTdcTestResults将再次变为空。

如何使TdcTestResult内部实例mTdcTestResults持久化?

0 投票
3 回答
2649 浏览

matlab - 为什么当我尝试将类属性分配给属性块中的另一个类属性时,MATLAB 会引发“未定义变量”错误?

如果我运行此代码来创建一个简单的类:

我收到一个错误:

为什么是这样?我在这个最小示例中省略了构造函数,因为 a) 如果我将构造函数放入,错误仍然存​​在,并且 b) 我在单元测试类中遇到此错误,并且在 MATLAB 2013b 中的此类类中未调用构造函数。

0 投票
1 回答
303 浏览

matlab - matlab中的oop范式产生了多少开销

在 matlab 中,每个类方法看起来都像是一个普通方法,其第一个参数是对象本身。

这种范式对于其他 oop 语言(例如 python)是完全可以接受的,因为类是通过引用传递的。另一方面,matlab 默认情况下按值传递对象(句柄类除外)。

从所有这些我推断,即使使用最简单的 setter 函数(或任何其他类方法)也会导致整个对象被复制。

例如,这是 matlab 中某些类方法的签名:

在这种情况下,当我调用 fooObj.myfun(5) (或只是 myfun(fooObj,5))时,matlab 会复制整个 fooObj=foo() 吗?

这不是一个非常大的开销吗?在我看来,为每个类方法(和 setter)复制整个对象似乎非常低效。

我错过了什么吗?在仍然使用 oop 技术的同时,有没有办法在 matlab 中避免这种情况?

我是否必须使用句柄类来防止这种性能开销?

0 投票
1 回答
1600 浏览

matlab - Matlab无法调用超类方法

我是 Matlab 的新手,在调用超类方法时遇到了一些问题。

我有这个代码:

超类测试1:

子类测试:

继承工作正常;superclasses 函数显示test1为 的超类test。但是,当我调用时test2@test1(obj),它会返回一个错误:

"@" 在一个方法中,通过method@superclass 调用同名的超类方法。“@”的左操作数必须是方法名。

2test方法显然存在于超类test1中,所以我不确定到底出了什么问题。

0 投票
1 回答
108 浏览

matlab - MATLAB:当我尝试访问对象的属性时出错

这是它返回的错误:您无法获取 Planet 的 't' 属性。

Problem4dot10(第 12 行)中的错误 name=mercury.t(mercury);

我创建了 getter 函数来返回类行星的属性:

我从文件 Problem4dot10.m 中调用了 getter:

我查看了文档以试图弄清楚。我想做的是创建一个行星类来跟踪行星的位置,并计算行星在下一个时间步的位置。然后它假定新的状态。