2017-06-21 59 views
0

我在scala中有一个名为A的特征,我正在从它创建一个名为A1的case对象。就像这样:Scalacheck - 价值图不是Object A1的成员

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 

任何人都可以帮我解决这个错误吗?

+4

在你的代码中,你把'A1',就好像它已经发生器(即你在'<-'的右侧使用它,但事实并非如此。改为尝试'val a:Gen [A] = Gen.const(A1)'。 – Jubobs

+2

@Jubobs我认为你应该发布这个答案。 :-) – stefanobaghino

+0

作为附加信息:scala编译器会将for-comprehension转换为.map()和.flatMap()链。这就是为什么错误说'map不是(...)'的成员' – EmilioMg

回答

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 
} 

直接返回发电机..

0
def a: Gen[A] = for { 
    value <- foo 
} yield value 

将汇编如果foo有型Gen[A]。但是,在您的代码中,您使用的不是Gen[A],而是A1

如果要定义一个始终返回A1的生成器,则可以达到Gen.const。此外,你还不如让a一个val而非def,因为它不带任何参数:

val a: Gen[A] = Gen.const(A1) 
相关问题