は、私は次のように宣言された関数があるとしましょう: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
宣言によって導入された)であり、2つの異なる機能を表すことができます。
1つの可能性は、テンプレートを使用することです。例えば、
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は、後に再実装することができます。
implement{} foo$(y) = true
はさらに重要なのは、FOOの$ yはFOOを呼び出す関数の本体に実装することができます。
fun bar(...) = let
implement foo$y() = ...
in
...foo(...)...
end // end of [bar]