2016-11-07 1 views

답변

1

나는 다음과 같이 할 수있는 것 같아요 :

fun foo_full (x:int, y:bool): string = ... // your function, renamed 
fun foo_def (x:int): string = foo_full (x, false) 
overload foo with foo_full 
overload foo with foo_def 

이 기능은 오버로드 상징이라고합니다. foo은 기호 (첫 번째 overload 선언에 의해 암시 적으로 도입 된 기호)이며 두 가지 다른 기능을 나타낼 수 있습니다.

0

하나의 가능성은 템플릿을 사용하는 것입니다. 예를 들어,

fun{} foo$y(): bool 
fun{} foo(x: int): bool 

implement{} foo$y() = false 
implement{} foo(x) = let val y = foo$y() in ... end 

실제로 이것은 단순히 함수 인수의 기본값을 지원하는 것보다 융통성이 있습니다. 예를 들어, foo는 $ y를 나중에 다시 구현할 수 있습니다

fun bar(...) = let 
    implement foo$y() = ... 
in 
    ...foo(...)... 
end // end of [bar] 
:

implement{} foo$(y) = true 

이 더 중요한, foo는 $ y를 foo를 호출하는 함수의 몸에서 구현 될 수있다

관련 문제