Kotlin函数真的是一流的类型吗?

时间:2019-02-25 17:04:22

标签: kotlin first-class-functions

不编译的事实是否意味着它们不是一流的类型?

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

有没有一种方法可以不借助OO?

2 个答案:

答案 0 :(得分:6)

  

不编译的事实是否意味着它们不是一流的类型?

不,不是。

在Kotlin中,要将函数或属性作为值引用,您需要使用callable references,但这只是obtaining a valuefunction type的语法形式:

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

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

一旦获得了这一价值,您就不会受到使用它的方式的限制,这就是一流的功能。

答案 1 :(得分:4)

You can use reference to the function ::上工作:

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

val bar = ::foo

然后调用它:

bar("some string")