指定义为成员的扩展功能;内联

时间:2019-11-27 09:40:47

标签: kotlin

说我有以下内容:

object Foo {
    fun Int.negate() = -this
    fun negateInt(n: Int) = -n
}

我可以使用negateFoo上调用扩展方法with

fun main() {
  println(with(Foo) { 5.negate() }) // prints -5
}

我可以在Foo对象上调用另一个方法:

fun main2() {
    println(Foo.negateInt(5)) // prints -5
}

我认为with(Foo) { 5.negate() }在语法上比Foo.negateInt(5)稍微偏重,而正文只是一个调用。我找不到更紧凑的方式来执行此调用。我曾希望我可以Foo::negate来获得函数(Int) -> Int,其中this被提升为自变量,就像我可以对普通的非扩展方法一样。例如,val f = Int::toString将给我一个函数(Int) -> String,以使f(42)等效于42.toString()。如果可以的话,我可以写(Foo::negate)(5),它仍然很重,但是比with(Foo) { ... }少。

真的没有办法明确引用定义为成员的扩展方法吗?

2 个答案:

答案 0 :(得分:0)

是的,您可以直接参考。为此,您只需要将扩展​​功能导入您当前的软件包中即可:

import Foo.negate

然后在您的代码中可以执行以下操作:

println(5.negate())

答案 1 :(得分:0)

也许这是最好的

<str: "StringA":"zero">
<str: "StringB":"second">
<str: "StringC":"null">