私はScalaを学んでおり、モナドの概念は現在の知識レベルでは洗練されていないことがわかりました。しかし、私の目標は、少なくともfor
式で使用できる非常に単純なクラスを作成し、さらにフィルタを作成することです。Scala:単純なカスタムタイプのmapとwithFilterの実装
理解の私の観点から、以下のルールが適用されます。
- 発現させるための発電機で使用できるようにするカスタムタイプのためには、(発電機のみの単純な変数を生成している)、それはする必要があります
map
を実装します。 - フィルターをさらに使用する必要がある場合は、タイプも
withFilter
を実装する必要があります。
私の最小限のクラスは次のようになります。しかし、私はと例を見つけるのに苦労してい
for(f <- grid) yield f.name // needs map
for(f <- grid; if f.isVisisble) yield f.name // needs map + withFilter
:
class Grid(private val fields: IndexedSeq[Field])
class Field(val name: String, val isVisible: Boolean)
私が達成したい何が次の操作を行うことができていますそんなシンプルさ。ソリューションが、どのクラスにも適用可能な一般的なソリューションではなく、上の2つのクラスに合わせて調整されていれば問題ありません。この単純な例の実装を理解することは間違いなく私を助けます。どんな助けもありがとう、ありがとう。
編集:李氏は指摘したように
、私の意図は、一般的なタイプのために働くように見えます。あなただけのラップコレクションfields
の上map
コールを渡すことができ
class Grid[E](private val fields: IndexedSeq[E])
'map'と' withFilter'は、 'Grid'と' Field'はそうではないジェネリック型に対してのみ意味があります。 for(f < - grid)yield f.name'はどのように動作しますか? – Lee
@リあなたのお返事ありがとうございます、それについて考える必要があります。私の編集は何か変わるのですか? – ceran