2016-11-07 10 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宣言によって導入された)であり、2つの異なる機能を表すことができます。

0

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] 
関連する問題