2016-11-07 3 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 $ у может быть повторно реализована позже:

implement{} foo$(y) = true 

Что еще более важно, Foo $ у может быть реализован в теле функции вызова Foo:

fun bar(...) = let 
    implement foo$y() = ... 
in 
    ...foo(...)... 
end // end of [bar] 
Смежные вопросы