2014-03-13 2 views
0

필자는 C와 Matlab 프로그래머가 Julia로 이동하면서 함수 옵션이 전달 될 때 어떻게 표시되는지 이해하려고 노력하고 있습니다.줄리아에서 열거 형 함수 인수를 전달하는 방법은 무엇입니까?

가끔씩 함수는 제한된 함수 다른 옵션의 수. C에서는 다음과 같이 보일 수 있습니다.

enum Options{ 
    OPTION_1, 
    OPTION_2 
}; 

// Other arguments omitted 
void foo(..., enum Options option){ 
    switch(option){ 
    case OPTION_1: 
     // Do something 
    break; 
    case OPTION_2: 
     // Do something else 
    break; 
    } 
} 

줄리아에서 어떻게 구조화할지 잘 모르겠습니다. 내 첫 번째 시도는 추상 형식의 계층 구조를 사용하고 그 다음에 결정을 내리기 위해 단일 형식을 허용하는 함수를 사용했습니다. 다음 코드를 참조하십시오.

abstract Options 
abstract Option_1 <: Options 
abstract Option_2 <: Options 

function foo{T<:Options}(..., ::Type{T}) 
    if isa(Option_1, Type{T} 
     //Do something 
    elseif isa(Option_2, Type{T}) 
     //Do something else 
    end 
end 

그러나 이것은 매우 이상한 방법으로 문제에 접근하는 것처럼 보입니다. 함수 입력을 제어하기위한 유형을 만드는 것은 이상하게 느껴집니다.

또한 명확히하기 위해 나는 이것이 Julia의 일반적인 매개 변수 방법으로 해결할 수있는 해결책이라고 생각하지 않습니다. 사용자가 플래그 (예 : 버전 1 또는 버전 2 실행)를 지정할 수 있도록 찾고 있는데, 입력 유형에 따라 다른 기능을 갖고 있지 않습니다.

도움 주셔서 감사합니다.

답변

1

나는 파라 메트릭 방법이 실제로 정확히 당신이 찾고있는 것이라고 생각합니다.

abstract Option_1 
abstract Option_2 

foo{T<:Options_1}(...) = do_something() 
foo{T<:Options_2}(...) = do_something_else() 

두 구현 사이에 공통 코드가있는 경우 다른 기능으로 분해하여 둘 다 사용하십시오. Julia는 열거 형을 가지고 있지 않지만 같은 일을 성취 할 수있는 방법을 가지고 있으며 매개 변수 방식은 그렇게 할 수있는 완벽한 방법입니다.

+0

알았어, 고마워. 그것은 여전히 ​​나를위한 타입 시스템의 남용처럼 느껴지 겠지만, 아마도 저는 Julia에서 Julia를 프로그래밍하려고합니다. C를 모방하지 않으려 고합니다. – Glenn

0

질문을 분석하는 경우 인수를 통해 두 가지 기능 중 하나를 선택하는 것입니다. 따라서 실제로 두 개의 함수가 하나의 함수 안에 섞여 있고 두 개의 다른 함수를 두 개의 다른 함수로 나눌 수 있습니다.

일단이 작업을 수행하면 호출 할 함수를 결정하는 방법이 객체 유형과 관련되어있을 가능성이 높다는 사실을 깨닫는 간단한 단계입니다. 하지만 실제로 사용 사례에 대해 자세히 설명해 주시면 다른 대안을 제안 할 수 있습니다. 예를 들어 특정 유형의 동작을 설정하거나 해제하는 부울 변수 일 수 있습니다.

줄리아 v0.4 (현재 안정 버전)에서 @enum을 사용하여 C에서 사용할 수있는 것과 유사한 enum을 만들 수 있습니다 (NEWS.md file 참조).

관련 문제