2014-09-29 60 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程序員會被警告。子功能中的語法錯誤會導致意外的錯誤消息。在這種情況下,系統似乎忽略了錯誤的功能,並且沒有定義就繼續進行。這反過來又導致了一個未定義的函數錯誤。