在 Matlab 中访问 @folder 函数
Posted
技术标签:
【中文标题】在 Matlab 中访问 @folder 函数【英文标题】:Access @folder functions in Matlab 【发布时间】:2013-10-28 17:36:12 【问题描述】:大家
我在 Matlab 中处理 @folder 时遇到问题。
我添加了包含@folder 的父文件夹的路径。但我仍然无法使用@文件夹中的功能。也就是比如有个函数叫ttt.m,我直接调用的时候:
ttt(参数)
它返回:未定义的函数或变量。
但是当我使用帮助命令查看它时,它可以工作:
帮助ttt
返回ttt函数的信息
我不明白这里发生了什么。请帮忙。
【问题讨论】:
我知道我可能没有满意地回答你的问题。您是否看到与文件夹同名的 .m 文件?这应该是使用@folder 中文件的类的定义。然后,您可以通过该类使用方法,通过实例或静态方法。 谢谢 chappjc。是的,我在 @folder 中看到了 .m 文件。我明白你的意思。但只是为了确保:您的意思是我需要先调用定义,然后再调用@文件夹中的任何其他函数? 如果有问题的方法是Static
,那么你不需要实例,否则你需要创建类的实例。见here。
请原谅我不熟悉“静态”的概念。似乎在我首先调用定义之后,一切正常,至少到目前为止。但它仍然是非常有用的评论。谢谢!
太棒了。许多人想参考this MATLAB OOP doc page 了解更多详情。我必须查看类和方法定义才能给出准确的代码答案,但似乎你已经弄清楚了。
【参考方案1】:
那些文件夹contain code for custom classes 或现有类型的覆盖。你不要把它们放在路径上,或者直接使用它们,而是通过一个类。
当您想为一个类定义使用多个文件时,请使用这种类型的文件夹。 ... @-folder 必须包含在路径文件夹中,但它本身不在 MATLAB 路径上。将类定义文件放在@-文件夹中,该文件夹还可以包含单独的方法文件。类定义文件必须与@-文件夹同名(不带@-符号),并且类定义(以 classdef 关键字开头)必须出现在文件中的任何其他代码之前(空格和 cmets 不构成代码)。
这是定义类的原始方式;一种新方法是将所有内容都放在一个文件中。 Here is an explanation of the two methods。
编辑:如果有问题的方法是Static
,那么你不需要实例,否则你需要创建类的实例。有关静态方法的信息和实例化类以调用方法的示例,请参阅here。 MATLAB OOP documentation 中有更详细的方法调用说明。
【讨论】:
“老办法”?这有一定的内涵。据我所知,它同样受到支持——The MathWorks 自己的许多工具箱仍在使用它。使用多文件夹方案有缺点吗? 我并不是暗示它更好或被 MathWorks 推荐,只是它恰好是在 @ 方法之后引入的。但是,others have their opinions about which is better. 7.6 之前的文档文件本身已经过时,不一定包含其中的所有内容。这是 R2013b 中面向 OOP 的 the documentation (PDF)。 很公平。我删除了the document 以避免这种混淆。但有趣的是,他们不厌其烦地发布一个标记为过时的文档,只是为了指向新文档……这似乎很奇怪。以上是关于在 Matlab 中访问 @folder 函数的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 MATLAB 中为每个文件定义多个函数,并从该文件外部访问它们?
在 MATLAB 中使用 MEX 文件访问存储在元胞数组中的矩阵