在kotlin中扩展lambdas是否合适?

时间:2018-03-22 12:31:14

标签: lambda kotlin

我在kotlin编程方面比较新,最近我发现这是一个有效的陈述:

class Test : (Int) -> String {
    override fun invoke(p1: Int): String {
        return p1.toString()
    }
}

当我看到它时,我感觉扩展Lambdas可能不是一个很好的编程实践,但是我没有任何客观的理由这么认为。我没有找到关于这个问题的任何文档,所以你能告诉我们扩展lambdas是好还是坏。

1 个答案:

答案 0 :(得分:5)

(Int) -> String这样的函数类型在技术上是接口(如detailed spec doc中所述),所以如果你觉得需要在类中实现它们,那么没有什么能阻止你这样做。 / p>

如果您这样做,您将能够使用您的课程实例,其中需要(Int) -> StringInt.() -> String个功能。

如果您只需要使用函数语法调用类的实例,而不是将它们用作函数类型的实例,那么只需将invoke(...) operator定义为成员或扩展函数即可。