Следующее не компилируется:
fun<T> doSomething(value: T, action: (value: T) -> String = Any::toString){
//do something
}
Ошибка:
Kotlin: Type mismatch: inferred type is KFunction1<Any, String> but (T) -> String was expected
Сделать это легко:
fun<T> doSomething(value: T, action: (t: T) -> String = {t -> t.toString()}) = action(value)
Однако это оставляетмне интересно: в чем разница между лямбдами и KFunctions?Зачем нам нужны оба?
Также есть более простой способ предоставить Any :: toString в качестве действия по умолчанию?