l
最初の行はtypeの変数を定義しますEither[String, Int]
。(Either
抽象) クラスは、何かが 2 つの可能な値のいずれかを保持できる場合を示すために使用されます。およびクラス サブクラスLeft
、したがって有効な割り当て。慣例では、ある種の失敗 (例:何がうまくいかなかったかの説明)を示し、ある種の成功した計算/値を示します。この情報があれば、2 行目もかなり自明です。Right
Either
Left
String
Right
l
3 行目と 4 行目では、 変数と変数に射影を使用し、r
を実行しmap
ます。left
およびメソッドは射影を返します。変数にright
射影するとleft
、内部の値を超えることができます。変数に射影すると、. などで行う場合も同じです。Left
map
right
Left
Right
map
right
Left
したがって、3行目l
はaLeft
であり、それを射影すると、「花」の長さは6であるため、与えられた値を超えてleft
適用されます。map
Left("flower")
Left(6)
4 行目でr
はRight
、そうなので何もしません。
ご質問について:
_.size
はメソッドに渡される関数map
です。map
メソッドは内部の値を「アンパック」し( 4 行目は左射影であるためLeft
何もしません)、それを呼び出します。Right
.size
r.left
値の左射影を返しRight(12)
ます。コードの 4 行目に見られるように、これをマッピングしても何も起こりません。
同じ古いRight(12)
値。
それはRight(12)
and 型Right[_, Int]
であるため、 をサブクラスEither[Int, Int]
化するため、有効です。私が信じているタイプを示すためにそこにあるだけです。
REPL に移動して のようなタイプを入力すると、タイプval foo = Right(1234)
が取得されます。タイプはすべてのタイプのサブクラスRight[Nothing, Int]
であるため、これは「機能します」 。Nothing
関連するメモとして、これや Scala に慣れてきたら、Scalaz (型クラス、モナドなどの関数型プログラミングを提供する Scala 用のライブラリ) とValidation
かなり似ているクラスをチェックすることをお勧めします。にEither
。