【发布时间】:2019-10-21 23:31:08
【问题描述】:
在this page 上解释inputParser 类的使用,
我们看到示例中的每个inputParser 方法调用都采用以下形式
methodname(object, arguments)
而不是
object.methodname(arguments)
例如
addRequired(p,'filename',@ischar)
而不是
p.addRequired('filename',@ischar)
其中p 是inputParser 的实例。
我会说这使得addRequired 的来源不清楚,而无需通过which 或在调用它之前在代码中的实例化行中搜索它。在任何情况下都可以使用addRequired 会破坏封装,这似乎与您最初引入 OOP 所希望的完全相反。
我怀疑有充分的理由牺牲可读性并以这种特殊方式编写文档。
所以我的问题是,MATLAB 中的“功能”和“OOP”语法之间有任何实际区别吗?
【问题讨论】:
-
关于可读性的观点,但实际上 methodname(obj, args...) 实际上是规范语法,而 obj.methodname(args...) 是语法糖。这部分源于 2008 年之前基于 classdef 的类语法,根本没有提供这种语法糖。
-
此外,我相信在文档中搜索 addRequired 等(即通过“帮助”)也会为各种类提供该函数的任何重载,因此检测适当的使用上下文应该不是问题从这个意义上说。
-
感谢@TasosPapastylianou 对历史原因的解释。我只是添加一条评论,希望在 MATLAB 中具有决策权的人注意到,在代码审查期间,不依赖 MATLAB 可执行文件的可读性很重要,现在通常发生在浏览器(bitbucket、github)中。
-
我已经挖掘了这个问题/答案stackoverflow.com/questions/1693429/… 而且过去似乎也存在性能问题,但现在没有。
-
@HennadiiMadan “为什么 X 的开发人员选择使用 Z 来做 Y”问题并没有真正由任何人回答,但开发人员说,所以对 SO 不是很好。此外,这个特定问题可能会被视为您表达对某些设计选择的不满,而不是实际问题。我建议您将问题的重点改为“MATLAB 中的函数式语法和 OOP 语法有什么区别?”,在这种情况下可以建议一个客观的答案。
标签: matlab oop methods syntax matlab-class