【问题标题】:Scala generate arbitrary instance of parametrized case classScala 生成参数化案例类的任意实例
【发布时间】:2019-11-12 18:05:33
【问题描述】:

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

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】:

    随机生成器依赖于 ClassTag 类型的隐式值来完成它的工作。但是,直到另一个 trait 或类实际扩展了 Foo,A 才知道,因此编译器不能像 fooBound 那样提供隐式参数。尝试保持“a”抽象,然后在其他类中覆盖它,或者将 A 作为 ClassTag 传入?看这里的源码看https://github.com/DanielaSfregola/random-data-generator/blob/master/js/src/main/scala/com/danielasfregola/randomdatagenerator/RandomDataGenerator.scala

    【讨论】:

      猜你喜欢
      • 2014-04-10
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      相关资源
      最近更新 更多