2017-06-21 61 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) 
相關問題