Scala构造函数抽象
发布时间:2020-12-16 08:49:14 所属栏目:安全 来源:网络整理
导读:Scala中可以使用以下内容: scala val l = Listl: scala.collection.immutable.List.type = scala.collection.immutable.List$@7960c21ascala l ( 1,2,3 )res0: List[Int] = List(1,3) 换句话说,Scala具有更高阶的多态性.我想使用高阶多态来执行以下操作. se
Scala中可以使用以下内容:
scala> val l = List l: scala.collection.immutable.List.type = scala.collection.immutable.List$@7960c21a scala> l ( 1,2,3 ) res0: List[Int] = List(1,3) 换句话说,Scala具有更高阶的多态性.我想使用高阶多态来执行以下操作. sealed abstract class A { def eval () : A } case class A0 () extends A { ... } case class A1 ( a : A ) extends A { ... } case class A2 ( a : A,b : A ) extends A { ... } .... 所以我有一堆案例类,A的子类,其构造函数不一定采用相同数量的参数.我也希望有一个’通用’案例类,如下所示: case class ApplyA ( c : ???,l : List [ A ] ) extends A { def eval () : A = { ??? } } 这个想法是,ApplyA将第一个参数作为A的子类型和参数列表的构造函数.然后,如果可能,eval方法使用构造函数构造一个适当的类(即列表具有正确的长度)并返回它 这应该是高阶多态的可能,但我无法弄清楚如何.我知道即使不使用高阶多态,只需在函数中包装构造函数,然后将这些函数作为第一个参数传递给ApplyA的构造函数,我就可以做到这一点,但我想了解如何直接使用高阶多态. 解决方法
问题是List示例根本不涉及任何高阶多态. List.apply只需要可变数量的参数:
def apply(xs: A*) 高阶多态性涉及将类型构造函数作为类型参数的方法或类型,例如, def fmap[F[_],A](x: F[A]): F[B] 所以不,你不能使用高阶多态. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |