2016-09-28 5 views
0

私はScalaを学び始めており、.mapの問題があります。 CanBuildFromを手で定義する必要があると思いますが、どうやってそれを行うのかわかりません。私はいくつかの紹介を見てきましたが、目的を理解しているうちに実装を理解することはできません。ScalaでCanBuildFromを作成する

コードを短縮するために、タイプエイリアスを定義しました。

type Dice = Vector[(Int,Int)]

私はそのベクトルにメソッドを追加する暗黙のクラスを作成しました。私は推測する。だから、私はmapを使用する場合

implicit class DiceMethods(dice: Dice){ 
    private def d(x : Int) = // some method 

    def roll : Dice = dice map(case (x: Int, y: Int) => (0, d(x) + y)) 
    } 

コンパイラは、私に叫ぶ、私はimplicit object someFunkyName extends CanBuildFromを必要とするが、残りは私を超えています。他にも問題があるかもしれません。

+3

使用中括弧 '{}の部分関数を定義するとき'(すなわち 'case'文を囲む)を心配する必要はありません。 – jwvh

+0

OK。それはうまくいくようです。 _それは決して私に起こりませんでした。ありがとうございました。 –

+0

ええ、このような場合、コンパイラエラーはあまり有益ではありません。 – jwvh

答えて

1

あなたは約CanBuildFrom

使用map { case .... }代わりにmap (case ...)

implicit class DiceMethods(dice: Dice){ 
    private def d(x : Int) = // some method 

    def roll : Dice = dice map { case (x: Int, y: Int) => (0, d(x) + y) } 
    } 
+0

ありがとうございます。コンパイラのエラーは「このような署名で参照 'マップ'を解決できません」でした。それは間違った道を私に導きます。 –

+0

私は '単純な式のillegal start'だけを見ます。それはIntelliJにありましたか?また、基本的な構文、dice.map(f) 'を知るまで、ドットをスキップしないことをお勧めします。 –

関連する問題