【问题标题】:What does the arrow ("->") operator do in Kotlin?Kotlin 中的箭头 ("->") 运算符有什么作用?
【发布时间】:2017-03-07 10:38:22
【问题描述】:

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

最明显的用途是when条件语句,它用于将表达式分配给特定条件:

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

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

其他用途是什么,它们有什么作用? Kotlin 中箭头操作符有一般含义吗?

【问题讨论】:

    标签: operators kotlin


    【解决方案1】:

    -> 是 Kotlin 语法的一部分(类似于 Java 的 lambda expressions syntax),可以在 3 个上下文中使用:

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

       val greet = when(args[0]) {
         "Apple", "Orange" -> "fruit"
         is Number -> "How many?"
         else    -> "hi!"
       }
      
    • 将参数与函数体分开的 lambda 表达式

        val lambda = { a:String -> "hi!" }
        items.filter { element -> element == "search"  }
      
    • 函数类型,它将参数类型与结果类型分开,例如comparator

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

    关于 Kotlin 语法的详细信息特别是in the documentation

    【讨论】:

    • 可能添加function types 示例和参考链接可能会改进此答案。
    • 现在有 3 个上下文,而不仅仅是 2 个。
    • 谢谢你们的帮助和详细的回答,伙计们。我会深入研究其他两个。
    【解决方案2】:

    -&gt; 是一个分隔符。它是用于分隔不同用途的代码的特殊符号。它可以用于:

    • lambda expression的参数和正文分开

      val sum = { x: Int, y: Int -> x + y }
      
    • function type中分离参数和返回类型声明

      (R, T) -> R
      
    • 分离when expression分支的条件和主体

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

    这里是documentation

    【讨论】:

    • 对我来说,接受的答案并没有解释 -&gt; 是分隔符的基本概念。我的回答是试图解决这个问题。我还尝试提供一些例子来清楚地证明这种分离。
    • 很公平,我自己是 Kotlin 的新手,并没有意识到这一点。
    【解决方案3】:

    来自Kotlin docs

    -&gt;

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 2013-10-11
      相关资源
      最近更新 更多