我想获得一些Matlab内置类的metaclass,我对@ftp
类有疑问:which
看到了类,但是>> which('ftp')
/usr/local/MATLAB/R2016a/toolbox/matlab/iofun/@ftp/ftp.m % ftp constructor
看不到元类系统:
>> ?ftp
ans =
0x0 class array with properties:
Name
Description
...
但
@serial
我使用meta.class.fromName
得到了相同的空结果。
让我确切地说,which
和元类系统都可以找到其他类,例如>> which('serial')
/usr/local/MATLAB/R2016a/toolbox/matlab/iofun/@serial/serial.m % serial constructor
类:
>> ?serial
ans =
class with properties:
Name: 'serial'
Description: ''
...
和
if (d3.event instanceof Event) {
}
为什么会这样?这是一个错误还是一个功能?
如果这有一定的重要性,我在Ubuntu 16.04上运行Matlab R2016a。
答案 0 :(得分:1)
这是因为ftp
实际上是一个旧式类(使用@classname
文件夹系统与非classdef
构造函数相结合)。在此样式中,您具有以下文件结构:
@ftp
ftp.m <--- Constructor (regular m-file, non-classdef)
ascii.m <--- Methods
binary.m |
... V
delete.m
与新式的类(classdef
)相比,这些旧类有一些局限性,包括它们不适用于元类。
请记住,如果以旧样式编写类,则不支持新框架中提供的以下功能:protected,abstract,static / constant,sealed或hidden方法或属性;单个文件类定义;事件;处理班级;包;特殊设置和获取方法; object.method()语法;或元类。
新类型的类(classdef
)can still use the @classname
class folders,但构造函数文件现在是classdef
文件。对于这些类型的类(例如serial
),支持元类 。