Scalacheck - 值映射不是Object A1的成员

时间:2017-06-21 05:54:33

标签: scala scalacheck

我在scala中有一个名为A的特征,我正在创建一个名为A1的case对象。像这样:

trait A
case object A1 extends A

现在,我想为它创建一个Scalacheck Gen,所以我创建了一个对象GenA,如下所示:

object GenA {
  def a: Gen[A] = for {
    value <- A1
  } yield value
}

但是当我尝试编译它时,我收到了以下错误:

value map is not a member of object A1
[error]     value <- A1
[error]              ^
[error] one error found
[error] (test:compileIncremental) Compilation failed

有人可以帮我解决这个错误吗?

2 个答案:

答案 0 :(得分:0)

可能你想尝试一下这个:

import org.scalacheck.Gen

trait A
case object A1 extends A

object GenA {
  def a: Gen[A] =
    for {
      value <- Gen.const(A1)
    } yield value
}

直接返回发电机..

答案 1 :(得分:0)

def a: Gen[A] = for {
  value <- foo
} yield value
如果foo的类型为Gen[A],则会编译

。但是,在您的代码中,您使用A1,而不是Gen[A]

如果要定义始终返回A1的生成器,请转到Gen.const。此外,您也可以将a设为val而不是def,因为它不会采用任何参数:

val a: Gen[A] = Gen.const(A1)