Scala infix类型别名为> 2型参数?
发布时间:2020-12-16 19:02:43 所属栏目:安全 来源:网络整理
导读:我知道在 Scala,你可以做类型=== [A,B] =地图[A,B]然后你可以使用中缀符号来定义def foo:String === Int与def def相同:Map [String,Int].有没有办法利用这个中缀符号创建具有 2参数的类型?例如,我想要这样的东西: 类型A? B ~~~ C是别名的地图[A,Pair [B,
我知道在
Scala,你可以做类型===> [A,B] =地图[A,B]然后你可以使用中缀符号来定义def foo:String ===> Int与def def相同:Map [String,Int].有没有办法利用这个中缀符号创建具有> 2参数的类型?例如,我想要这样的东西:
类型A? B ~~~> C是别名的地图[A,Pair [B,C]]? 有没有,我可以写一些这样的东西: 类型A到B – > C为(A,B,C)类型的别名? 解决方法
有趣的是,operator precedence as defined for symbolic methods似乎并不适用于符号类型的别名.而中缀类型别名总是被评估为左关联:
type -[A,B] = Map[A,B] type /[A,B] // '/' has higher precedence than '-' as an operator classOf[A - B / C] // Class[/[-[A,B],C]] classOf[A / B - C] // Class[-[/[A,C]] 不幸的是,这意味着永远不可能做你所要求的没有括号如下所示: classOf[A - (B / C)] // Class[-[A,/[B,C]] 所以最接近的答案是: type ~>[A,B] type ~~~>[A,B] = Pair[A,B] classOf[A ~> (B ~~~> C)] // Map[A,Pair[B,C]] 如果您使用正确的关联别名(仅以:)结尾,则只能使用圆括号 type ~:[A,B] type ~~~:[A,B] classOf[A ~: B ~~~: C] // Map[A,C]] 再次,不幸的是,由于所有类型的别名具有相同的优先级,所以不可能将没有括号的左右关联别名混合起来. 关于你的问题的第二部分:(A,C)是Tuple3 [A,C]的句法糖,它是一个具有三个参数的类型.因为中缀类型只有两个参数,恐怕我相信没有办法用infix类型来代表这个类型.你总是会得到嵌套的两个参数类型(例如(A,(B,C))或((A,B))C). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读