箭头(“->”)操作符在 Kotlin 做什么?

这可能是一个有点宽泛的问题,但是官方文档甚至没有将箭头操作符(或者语言结构,我不知道哪个短语更准确)作为一个独立的实体来提及。

最明显的用法是 when If判断语句,它用于将一个表达式赋值给一个特定的条件:

  val greet = when(args[0]) {
"Appul" -> "howdy!"
"Orang" -> "wazzup?"
"Banan" -> "bonjur!"
else    -> "hi!"
}


println(args[0] +" greets you: \""+ greet +"\"")

还有什么其他用途,它们是做什么的? 在 Kotlin,箭头操作员有什么一般性的含义吗?

37065 次浏览

->是 Kotlin 语法的一部分(类似于 Java 的 Lambda 表达式语法) ,可以在三种情况下使用:

  • 将“匹配/条件”部分与“结果/执行”块分隔开的 when表达式

     val greet = when(args[0]) {
    "Apple", "Orange" -> "fruit"
    is Number -> "How many?"
    else    -> "hi!"
    }
    
  • lambda expressions where it separates parameters from function body

      val lambda = { a:String -> "hi!" }
    items.filter { element -> element == "search"  }
    
  • function types where it separates parameters types from result type e.g. comparator

      fun <T> sort(comparator:(T,T) -> Int){
    }
    

Details about Kotlin grammar are in the documentation in particular:

->分离器。它是一种特殊的符号,用于区分不同用途的代码。它可以用来:

  • 分离一个 < a href = “ https://kotlinlang.org/docs/reference/lambdas.html # lambda-expression-language”rel = “ norefrer”> lambda 表达式的参数和主体

    val sum = { x: Int, y: Int -> x + y }
    
  • Separate the parameters and return type declaration in a function type

    (R, T) -> R
    
  • Separate the condition and body of a when expression branch

    when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
    }
    

Here it is in the documentation.

来自 Kotlin 医生:

->

  • 分离 Lambda 表达式的参数和主体

  • 在 < a href = “ https://kotlinlang.org/docs/reference/lambdas.html # function-types”rel = “ nofollow noReferrer”> 函数中分离参数并返回类型声明 类型

  • 分离 当表达分支的条件和主体