2014-09-29 3 views
1

나는 옥타브 패키지를 만들고 있는데 이상한 일이 일어나고있다.서브 함수와 개인 함수

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

이제 함수 foo 여러 다른 클래스에 대해 정의 : 클래스 A의 foo는 함수에서 I는 다음과 같이 cellfun를 사용하여 재귀 호출을합니다. 이전에 이것을 성공적으로 사용했습니다. 나는 순서를 변경 시도했습니다

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에 두 개의 하위 기능과 민간 기능을 사용합니다,이다의 차이는이 다음과 같은 오류가 발생할 수있는 위의 호출이 발생 부속 함수가 @ B/foo의 함수 파일에 나열되고 첫 x 째 부속 기능은 찾지 만 두 x 째 부속 기능은 찾지 못합니다. 하위 함수를 클래스 B에 비공개로 만들려고했는데 문제가 지속되었습니다.

제 질문은 이렇습니다. 여기서 어떻게됩니까? 그것은 cellfun의 사용인가? 익명의 기능? 왜 foo가 아닌 하나의 subfunction을 잡아 두 개가 아닌가? 객체 클래스? 줄/열 -1이보고되면 어떻게됩니까? 나는이 헬퍼 함수를 ​​사용자로부터 숨기고 싶다. 그래서 공공 경로에 서브 함수를 놓는 것 외에 다른 것을 선호한다.

답변

0

문제가 해결되었습니다. 제 질문이 그걸 내놓은 것이 아니 었습니다. 서브 함수 중 하나에서 열린 if 문 (즉, endif가 없음)이 있음이 밝혀졌습니다. 두 하위 함수를 자신의 함수 파일로 옮기고 해당 파일을 패키지의 공용 디렉토리에 두었을 때 발견했습니다. 여기에서 함수를 호출하면 구문 분석 오류가 발생합니다.

따라서, 옥타브 프로그래머에게 경고해야합니다. 하위 함수의 구문 오류로 인해 예기치 않은 오류 메시지가 발생합니다. 이 경우 시스템은 오류 기능을 무시하고 정의없이 진행하는 것처럼 보였습니다. 이것은 차례로 정의되지 않은 함수 오류를 발생시킵니다.