내가 다음과 같이 함수 선언이 말 :ATS의 함수 인수에 기본값을 제공하는 방법은 무엇입니까?
fun foo(x: int, y: bool): string
내가 foo(x, false)
을 의미하는 foo(x)
를 작성하려합니다. ATS에서이를 지원하는 방법이 있습니까?
내가 다음과 같이 함수 선언이 말 :ATS의 함수 인수에 기본값을 제공하는 방법은 무엇입니까?
fun foo(x: int, y: bool): string
내가 foo(x, false)
을 의미하는 foo(x)
를 작성하려합니다. ATS에서이를 지원하는 방법이 있습니까?
나는 다음과 같이 할 수있는 것 같아요 :
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
선언에 의해 암시 적으로 도입 된 기호)이며 두 가지 다른 기능을 나타낼 수 있습니다.
하나의 가능성은 템플릿을 사용하는 것입니다. 예를 들어,
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를 호출하는 함수의 몸에서 구현 될 수있다