Scala,in Predef,定义支持->和?(这里清理了一下):
final class ArrowAssoc[A](val __leftOfArrow: A) extends AnyVal {    
    def -> [B](y: B): Tuple2[A, B] = Tuple2(__leftOfArrow, y)
    def ?[B](y: B): Tuple2[A, B] = ->(y)
}
这样可以方便地使用箭头符号而不是普通元组语法创建对:
scala> "foo" ? 42
res0: (String, Int) = (foo,42)
可以使用类型定义和提取器轻松扩展此箭头语法(此处仅?显示):
type ?[A, B] = (A, B)
object ? { def unapply[A, B](t: (A, B)) = Some(t) }
这允许你写下这样的东西:
"a" ? 42 match { case a ? b ? println(s"found `$a` and `$b`") }
和:
def foo[A, B](t: A ? B) = ???
我想知道是否有任何理由Scala没有在其标准库中定义那些.这些定义有任何缺点吗?
这是一个缺点。能够同时做到这两点
def foo[A, B](t: A -> B) = ???
和
def foo[A, B](t: A => B) = ???
会很混乱。如果类型不对齐,编译器当然会捕获它。然而,只有经验丰富的 Scala 程序员才能快速理解错误消息。
| 归档时间: | 
 | 
| 查看次数: | 949 次 | 
| 最近记录: |