2017-02-28 12 views
3

f(x,y)과 같은 기능이 있지만 y 매개 변수는 선택 사항입니다. 선택적 인자로 y을 설정하는 가장 좋은 방법은 무엇입니까? 나를 위해 적합한 하나의 옵션 :선택 인수에 대한 Julia 규칙

function f(x, y=nothing) 
    # do stuff 
    if y == nothing 
     # do stuff 
    else 
     # do stuff 
    end 
    # do stuff 
end 

이 방법이 바람직합니까? y이 아무 것도 아닌 경우 다르게 수행되는 많은 계산이 있으므로 y을 계산에 사용할 단일 기본값으로 설정할 수 없습니다. 나는 또한 별도의 기능을 f(x)f(x,y) 가질 수 있지만 너무 많은 코드 중복 것처럼 보입니다.

답변

5

괜찮습니다. 선택적 인수가 디스패치를 ​​유발한다는 점에 유의하십시오. 즉, if y == nothing (또는 이와 동등하게는 if typeof(y) <: Void)이 실제로 컴파일됩니다. 사용자가 가치를 부여하는지 여부에 따라 두 가지 기능을 사용할 수 있습니다. 따라서 결국 if 문장이 컴파일되고 효율적으로 처리됩니다.

키워드 인수에는 현재 동일한 내용이 적용되지 않습니다. if 문제에 따라 함께 더 좋은 것보다 한 방법이다

f(x) 

f(x,y) 

방법이 여부 :

이 작업을 수행하는 또 다른 방법은 두 가지 방법을 가지고있다. if은 형식 정보를 사용하여 컴파일되므로 코드 조직 이외의 두 가지 방법에는 차이가 없습니다.

+0

고마워요! y가 더 나은지/선호하는 방법인지 여부를 확인하는 버전입니까? – ChrKroer

+0

'y == nothing'은 값을 검사 할 때 '아무것도 없다'는 유일한 방법은'typeof (y) <: Void'를 가지므로 하나의 경우라고 생각합니다. 그러나 형식 검사를 항상 사용하는 경우 형식이 안정된 함수가 컴파일 될 것이라는 것을 알 수 있습니다. 그 사실은 꽤 안전합니다. 왜냐하면 타입 안정 함수는 항상 타입을 알고 있지만 반드시 값은 아닐 것이기 때문입니다. 'Void'는 다르지만 –

+0

이 방법이 좋다고 확신합니다. 그러나 선호하는 방법은 무엇이 었는지, 선호하는 방법은 일반적으로 (항상 그런 것은 아니지만) 두 개의 분리 된 메소드'f (x)'와' f (x, y)'. 특히 그것이 코드를 더 깨끗하게 만드는 경우. – DNF