扩展Scala的箭头符号成对
发布时间:2020-12-16 09:32:00 所属栏目:安全 来源:网络整理
导读:Predef中的Scala定义了对的支持。和→(这里清理了一下): 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)} 这方便您使用箭头符号而不是纯
Predef中的Scala定义了对>的支持。和→(这里清理了一下):
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程序员才能快速了解错误信息。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |