【问题标题】:Is it possible to differentiate between a class method and a function with a class parameter in Matlab? [duplicate]是否可以在 Matlab 中区分类方法和带有类参数的函数? [复制]
【发布时间】:2013-07-10 04:19:42
【问题描述】:

假设我有一个带有方法栏的类 Foo。

我还有一个独立的函数栏,它接受 Foo 类的对象。

可以区分这两者吗?还是一样?

foo = Foo()
foo.bar() %Is this call equivalent
bar(foo)  %to this call?

编辑:我的无限循环问题示例:

项目类

classdef Project
...
function predict(proj)
    ...
    run_predict;
end

run_predict(在 "proj = Project()" 之后调用)

...
predict(proj);

预测函数(永远不会调用它!)

function predict(proj);
...
end

【问题讨论】:

  • 为什么它们是等价的?它们完全不相关。
  • 试试看怎么样?
  • 我做到了,但我陷入了无限循环,因为类方法总是被调用,而独立函数永远不会被调用。我想知道如何保持相同的函数名称,但区分函数调用,因为它们位于两个不同的上下文中。
  • 啊哈,那么如果您可以编辑您的问题并生成产生所描述行为(无限循环)的最小示例,那就太好了。那怎么样?
  • 他们都会调用类方法。这是stackoverflow.com/questions/17576506/…

标签: matlab class function methods


【解决方案1】:

如果您输入 which -all bar,您应该会看到如下内容:

C:\path\to\function\bar.m
C:\path\to\class\Foo.m     % Foo method

方法用% Classname method 注释标识。

或者您可能在询问有关方法/函数分派的更复杂的问题?

【讨论】:

  • 这正是我所看到的,但是,我似乎无法调用该函数——它总是调用类方法,即使我使用bar(foo) 语法。
  • 没错——类方法总是优先于路径上的函数。我相信子函数和私有函数都优先于类方法:因此,在您的示例中,如果您将函数 predict 设为 run_predict 的子函数(您必须将 run_predict 设为函数而不是脚本这样做)它应该优先于类方法被调用。或者,通过在与run_predict 相同的目录中创建一个私有目录来使其成为私有函数,并将predict 函数放在那里。
  • ...续。请注意,上述两个建议都将限制predict 函数的调用方式。如果是run_predict的子函数,只有run_predict可以调用。如果是私有函数,则只有包含私有目录的目录中的代码才能调用它。
猜你喜欢
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多