Scala生成参数化案例类的任意实例

问题描述 投票:0回答:1

我想生成参数化案例类的任意元素,并使用ScalaCheck的this library来找到gen。这适用于具体类型,但不适用于抽象类型。有没有解决的办法?

import com.danielasfregola.randomdatagenerator.RandomDataGenerator._
sealed trait FooBound {
   def bar: String
}

trait Foo[A <: FooBound] {
   implicit val fooBound = random[FooBound] // works fine
   implicit val a = random[A] 
   // fails due to: could not find implicit value
   //               for evidence parameter of type 
   //               org.scalacheck.Arbitrary[A]
}
scala traits scalacheck scala-2.11
1个回答
1
投票

随机生成器依赖于ClassTag类型的隐式值来执行其操作。但是,直到另一个特征或类实际扩展Foo为止,A才是未知的,因此编译器无法像使用fooBound一样提供隐式参数。尝试保留“ a”抽象,然后在其他类中覆盖它,或者将A作为ClassTag传递?在此处查看源代码以查看https://github.com/DanielaSfregola/random-data-generator/blob/master/js/src/main/scala/com/danielasfregola/randomdatagenerator/RandomDataGenerator.scala

© www.soinside.com 2019 - 2024. All rights reserved.