【问题标题】:Why no partial function type literal?为什么没有偏函数类型文字?
【发布时间】:2012-03-15 23:51:02
【问题描述】:

我想知道为什么不存在部分函数类型的文字。我要写

val pf: PartialFunction[Int, String] = {
  case 5 => "five"
}

:=> 这样的文字会更短:

val pf: Int :=> String = {
  case 5 => "five"
}

部分函数经常被使用,并且在 Scala 中已经有了一些“特殊”功能,那么为什么没有特殊的语法呢?

【问题讨论】:

    标签: scala built-in-types


    【解决方案1】:

    可能部分是因为您不需要文字:如果您想要更简洁的语法,您可以随时编写自己的 :=> 作为类型中缀运算符:

    scala> type :=>[A, B] = PartialFunction[A, B]
    defined type alias $colon$eq$greater
    
    scala> val pf: Int :=> String = { case 5 => "five" }
    pf: :=>[Int,String] = <function1>
    
    scala> pf.isDefinedAt(0)
    res0: Boolean = false
    
    scala> pf.isDefinedAt(5)
    res1: Boolean = true
    

    不过,我不是 Scala 语言的设计者之一,所以这或多或少是对“为什么?”的猜测。您可能会在the scala-debate list 获得更好的答案,这是一个更适合语言设计问题的场所。

    【讨论】:

    • +1 我只是想建议类型别名技巧,但不知道可以更进一步并使用中缀形式。
    • @Vlad,我承认当我第一次了解它们时,我经历了一个(简短的)类型中缀运算符滥用阶段,并且仍然认为这是一个非常漂亮的小语言功能。
    • 我之前也问过同样的问题,它没有被添加到语言中的原因(它以~&gt;的形式存在过)与类型参数的推断方式有关 l-2- r
    • 曾经 paulp 将 =&gt;? 添加到库中,但由于关联性与 =&gt;(关键字)不同,所以将其反转。
    猜你喜欢
    • 1970-01-01
    • 2012-01-30
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 2011-01-11
    相关资源
    最近更新 更多