Являются ли функции Котлина действительно первоклассными типами? - PullRequest
0 голосов
/ 25 февраля 2019

Означает ли тот факт, что это не компилируется, означает, что они не совсем первого класса?

fun foo(s: String): Int = s.length
// This won't compile.
val bar = foo

Есть ли способ сделать это, не прибегая к ОО?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Означает ли тот факт, что это не компилируется, означает, что они не совсем первого класса?

Нет, это не так.

В Kotlin для ссылки на функцию или свойство в качестве значения необходимо использовать вызываемые ссылки , но это всего лишь синтаксическая форма для получения значения типа функции :

fun foo(s: String): Int = s.length

val bar = ::foo // `bar` now contains a value of a function type `(String) -> Int`

Как только вы получите это значение, вы не будете ограничены в том, как вы работаете с ним, о чем говорят первоклассные функции.

0 голосов
/ 25 февраля 2019

Вы можете использовать ссылку на функцию :::

fun foo(s: String): Int = s.length

val bar = ::foo

И затем вызывать ее:

bar("some string")
...