0

여기에 사용 된 function1, Root, class1class2의 이름은 가상의 것이며 코드에는 존재하지 않습니다. 그들은 실제 이름을 숨기기 위해 여기 있습니다. 그러나 파일 시스템에서 파일이 어떻게 폐기되고 호출되는지를 명시합니다.다른 폴더에서 같은 이름으로 Octave에서 함수 오버로드를 해결하는 방법은 무엇입니까?

  1. Root, Root/class1Root/class2라는 폴더가 있습니다.
  2. Root/class1/function1.mRoot/class2/function1.m이라는 파일이 있습니다.
  3. 이 파일에는 각각 function function1(A)function function1(A, B) 기능이 있습니다. 이제

나는 파일을 실행 폴더 Root/class2 오전은 system.m라고 내가 할 :

addpath('../class1') 
function1(A) 

그리고 대신 전화의 기능 function function1(A) 파일에서 파일 Root/class2/function1.m에서 기능 function1(A, B)를 호출하려고 Root/class1, 오류 출력 :

error: 'B' undefined near line 4 column 27 

방법 파일에서 기능 function function1(A)를 호출을 Root/class2 폴더에서 파일을 실행하는 동안 현재 "컨텍스트"에서 함수가 오버로드됩니까?

다른 폴더에서 함수를 호출하고 싶지만, 거기에는 현재 폴더 내의 함수와 같은 이름이 있습니다.

+2

두 개의 다른 함수에 대해 동일한 함수 이름을 사용하지 않을 것을 제안하는 것이 너무 간단하다고 생각하십니까? – Adriaan

+2

함수의 이름을 function이라는 이름으로 지정하지 않아도됩니다 ... –

+1

@RockNinja [XY 문제] (http://xyproblem.info)의 경우에 대비하여 실제로 달성하려는 것은 무엇입니까? 네임 스페이스를 도입하는 방법은 여러 가지가 있습니다. 그 중 ...하려고 생각하는 것이 있다면 ... –

답변

2

많은 정보를 제공하지 않습니다. 이 모든 것은 왜 당신이 이것을하는지, 그리고 당신이이 코드를 개발/사용하고 있는지에 달려 있습니다.

그러나 일반적으로 이 아니어야합니다.은 현재 작업 경로에 같은 이름의 기능이 포함 된 폴더를 추가해야합니다. 그리고 당신은 가장 명확히 이되어야합니다.은 함수의 이름으로 "function"이라는 단어를 사용합니다. 그 이름은 function 키워드를 어둡게 만들고 모든 지옥이 느슨해지기 때문입니다.


옵션을 예를 들어, 정적 클래스 메소드로 기능을 변환 할 수있는 1
:

% in file class1.m: 
classdef class1 
    methods(Static) 
    function myfunction(A) 
     fprintf('Hello from class1: A is %d\n', A); 
    end 
    end 
end 

% in file class2.m 
classdef class2 
    methods(Static) 
    function myfunction(A,B); 
     fprintf('Hello from class2: A is %d and B is %d\n', A, B); 
    end 
    end 
end 

% at the terminal: 
>> class1.myfunction(5) 
Hello from class1: A is 5 
>> class2.myfunction(5, 3) 
Hello from class2: A is 5 and B is 3 


여기 당신이 뭘하려는 건지 수행하는 방법에 대한 몇 가지 제안입니다 옵션 2
또는 원하는 경우 모두 네임 스페이스 인 경우 Root/class1/myfunction.m의 이름을 Root/+class1/myfunction.m.는 "플러스"당신이 (루트 폴더)이 작업을 수행 할 수 있음을 의미하는 폴더는 "패키지", 수 :

class1.myfunction(5); 
class2.myfunction(5,3); 


옵션 3
당신은 정말 정상이 작업을 수행해야하는 경우 폴더 등등의 기능을 사용한다면, 경로에 "class1"을 추가하는 대신, 그 대신에 cd을 사용하고 그 디렉토리에서 함수를 사용하고 cd 원래 위치로 돌아갑니다. 예를 들어 파일 myfunction.m 인 폴더 Root/class1과 파일 myfunction.mmyscript.m 인 폴더 Root/class2이 있다고 가정 해 보겠습니다. 그런 다음 myscript.m에서 당신이 쓰는 그러나

% go to class1 directory to use the conflicting function 
cd '../class1' 
myfunction(5) 

% come back to class2 
cd '../class2' 
myfunction(5, 3) 

, 이것은 적어도 권장되는 방법입니다 가 있는지의 여부를주의하십시오! 끔찍하게 잘못 될 수 있기 때문에! (예 : 함수 중 하나가 디렉토리를 변경하거나 특정 폴더 구조에 의존하는 경우)