子功能和私人功能

时间:2014-09-29 12:18:41

标签: octave

我正在处理一个八度音阶的包,而且发生了奇怪的事情。在A类的foo函数中,我使用cellfun进行递归调用,如下所示:

... cellfun(@(d) foo(d,localval), cellarray ) ...

现在为几个不同的类定义了函数foo。我以前成功地使用了这个实践。这次的不同之处在于,在B类中,foo使用两个子函数和B类专用的函数。这导致上述调用导致以下错误:

error: 'subfunction2' undefined near line 29 column 6
error: called from:
error:   /usr/share/octave/packages/mypkg/@B/foo.m at line -1, column -1

我尝试更改@ B / foo函数文件中列出子函数的顺序,并验证它找到第一个子函数但不是第二个子函数。我也尝试将子函数私有化为B类,问题仍然存在。

所以我的问题是:这里发生了什么?是使用cellfun吗?匿名功能?为什么它会抓住一个子功能而不是两个?对象类?报告的行/列-1是什么?我真的很想隐藏用户的这些帮助函数,所以我更喜欢在公共路径中删除子函数。

1 个答案:

答案 0 :(得分:0)

问题解决了。这根本不是我的问题。事实证明,我在其中一个子功能中有一个开放的if语句(即没有endif)。当我将两个子函数移动到它们自己的函数文件并将这些文件放在包中的公共目录中时,我发现了它。从此处调用函数会导致触发解析错误。

所以,Octave程序员应该收到警告。子功能中的语法错误会导致意外的错误消息。在这种情况下,系统似乎只是忽略了错误的功能,并在没有定义的情况下继续进行。反过来,这会导致未定义的函数错误。