2014-09-29 59 views
1

我正在为八度音程打包,并且发生了一些奇怪的事情。在A类foo的功能让我使用cellfun这样的递归调用:子功能和私人功能

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

函数foo为几个不同的类中定义。我以前曾经成功地使用过这个practive。所不同的这段时间是,在B类,富利用了两个子功能和功能私募类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被报告了什么?我真的很想从用户那里隐藏这些帮助函数,所以我更喜欢除了删除公共路径中的子函数。

回答

0

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

因此,Octave程序员会被警告。子功能中的语法错误会导致意外的错误消息。在这种情况下,系统似乎忽略了错误的功能,并且没有定义就继续进行。这反过来又导致了一个未定义的函数错误。