在kotlin文档中找到有关函数和lambda的信息
class IntTransformer: (Int) -> Int {
override operator fun invoke(x: Int): Int = TODO()
}
val intFunction: (Int) -> Int = IntTransformer()
在此page中,它表示您可以实现函数类型以像接口一样进行分类。它是如何工作的?能否给我每个部分的解释,并举例说明如何完成?
据我了解,IntTransformer扩展/实现了将int作为参数和输出类型的匿名函数,但我仍然不知道它是如何工作的...
谢谢
答案 0 :(得分:1)
您可以想到一种类似于接口的函数类型,该接口具有一个名为invoke
且具有参数的函数,并且返回类型与其定义相匹配。
所以
(Int) -> String
非常像
interface Foo {
operator fun invoke(param: Int): String
}
因此,如果类从(Int) -> String
继承,您将采用与继承上面的Foo
完全相同的方式来实现。您可以说函数继承更为通用,因为它可以让您的类直接作为函数参数传递,而不必使用::invoke
对其调用函数进行引用。