scala – 您可以指定一个抽象类型的视图绑定吗?
发布时间:2020-12-16 09:05:44 所属栏目:安全 来源:网络整理
导读:在 my answer到 this question,我很惊讶以下代码不起作用. scala abstract class Foo { | type Repr_Tpe % Ordered[Repr_Tpe] | }console:2: error: `=',`:',or `:' expected OP表示用类型参数替换抽象类型不是一种选择.有没有办法表达一个抽象类型的视图?
在
my answer到
this question,我很惊讶以下代码不起作用.
scala> abstract class Foo { | type Repr_Tpe <% Ordered[Repr_Tpe] | } <console>:2: error: `=',`>:',or `<:' expected OP表示用类型参数替换抽象类型不是一种选择.有没有办法表达一个抽象类型的视图? 解决方法
肯定有.对于类型参数的视图绑定A<%B仅仅是“具有类型A => B的隐式值参数的糖”.那么你想要的是:
abstract class Foo { type Repr_Tpe implicit def orderify: (Repr_Tpe => Ordered[Repr_Tpe]) } 当然,实现必须在指定类型的同时提供orderify的实际实现.可能是类似的东西 class Bar extends Foo { type Repr_Tpe = Int val orderify = implicitly[Int => Ordered[Int]] } 要么 class Baz[A <% Ordered[A]] extends Foo { type Repr_Tpe = A val orderify = implicitly[A => Ordered[A]] } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |