Left
The left side of the disjoint union, as opposed to the scala.util.Right side.
- Source
- Either.scala
Value members
Concrete methods
Upcasts this Left[A, B]
to Either[A, B1]
Upcasts this Left[A, B]
to Either[A, B1]
Left(1) // Either[Int, Nothing]
Left(1).withRight[String] // Either[Int, String]
- Source
- Either.scala
Inherited methods
Returns true
if this is a Right
and its value is equal to elem
(as determined by ==
),
returns false
otherwise.
Returns true
if this is a Right
and its value is equal to elem
(as determined by ==
),
returns false
otherwise.
// Returns true because value of Right is "something" which equals "something".
Right("something") contains "something"
// Returns false because value of Right is "something" which does not equal "anything".
Right("something") contains "anything"
// Returns false because it's not a Right value.
Left("something") contains "something"
- Value Params
- elem
the element to test.
- Returns
true
if this is aRight
value equal toelem
.- Inherited from
- Either
- Source
- Either.scala
Returns false
if Left
or returns the result of the application of
the given predicate to the Right
value.
Returns false
if Left
or returns the result of the application of
the given predicate to the Right
value.
Right(12).exists(_ > 10) // true
Right(7).exists(_ > 10) // false
Left(12).exists(_ => true) // false
- Inherited from
- Either
- Source
- Either.scala
Returns Right
with the existing value of Right
if this is a Right
and the given predicate p
holds for the right value,
or Left(zero)
if this is a Right
and the given predicate p
does not hold for the right value,
or Left
with the existing value of Left
if this is a Left
.
Returns Right
with the existing value of Right
if this is a Right
and the given predicate p
holds for the right value,
or Left(zero)
if this is a Right
and the given predicate p
does not hold for the right value,
or Left
with the existing value of Left
if this is a Left
.
Right(12).filterOrElse(_ > 10, -1) // Right(12)
Right(7).filterOrElse(_ > 10, -1) // Left(-1)
Left(7).filterOrElse(_ => false, -1) // Left(7)
- Inherited from
- Either
- Source
- Either.scala
Binds the given function across Right
.
Binds the given function across Right
.
- Value Params
- f
The function to bind across
Right
.
- Inherited from
- Either
- Source
- Either.scala
Returns the right value if this is right or this value if this is left
Returns the right value if this is right or this value if this is left
- Example
val l: Either[String, Either[String, Int]] = Left("pancake") val rl: Either[String, Either[String, Int]] = Right(Left("flounder")) val rr: Either[String, Either[String, Int]] = Right(Right(7)) l.flatten //Either[String, Int]: Left("pancake") rl.flatten //Either[String, Int]: Left("flounder") rr.flatten //Either[String, Int]: Right(7)
Equivalent to
flatMap(id => id)
- Inherited from
- Either
- Source
- Either.scala
Applies fa
if this is a Left
or fb
if this is a Right
.
Applies fa
if this is a Left
or fb
if this is a Right
.
- Value Params
- fa
the function to apply if this is a
Left
- fb
the function to apply if this is a
Right
- Returns
the results of applying the function
- Example
val result = util.Try("42".toInt).toEither result.fold( e => s"Operation failed with $e", v => s"Operation produced value: $v" )
- Inherited from
- Either
- Source
- Either.scala
Returns true
if Left
or returns the result of the application of
the given predicate to the Right
value.
Returns true
if Left
or returns the result of the application of
the given predicate to the Right
value.
Right(12).forall(_ > 10) // true
Right(7).forall(_ > 10) // false
Left(12).forall(_ => false) // true
- Inherited from
- Either
- Source
- Either.scala
Executes the given side-effecting function if this is a Right
.
Executes the given side-effecting function if this is a Right
.
Right(12).foreach(println) // prints "12"
Left(12).foreach(println) // doesn't print
- Value Params
- f
The side-effecting function to execute.
- Inherited from
- Either
- Source
- Either.scala
Returns the value from this Right
or the given argument if this is a Left
.
Returns the value from this Right
or the given argument if this is a Left
.
Right(12).getOrElse(17) // 12
Left(12).getOrElse(17) // 17
- Inherited from
- Either
- Source
- Either.scala
Joins an Either
through Left
.
Joins an Either
through Left
.
This method requires that the left side of this Either
is itself an
Either
type. That is, this must be some type like:
Either[Either[C, B], B]
(which respects the type parameter bounds, shown below.)
If this instance is a Left[Either[C, B]]
then the contained Either[C, B]
will be returned, otherwise this value will be returned unmodified.
Left[Either[Int, String], String](Right("flower")).joinLeft // Result: Right("flower")
Left[Either[Int, String], String](Left(12)).joinLeft // Result: Left(12)
Right[Either[Int, String], String]("daisy").joinLeft // Result: Right("daisy")
This method, and joinRight
, are analogous to Option#flatten
.
- Inherited from
- Either
- Source
- Either.scala
Joins an Either
through Right
.
Joins an Either
through Right
.
This method requires that the right side of this Either
is itself
an Either
type. That is, this must be some type like:
Either[A, Either[A, C]]
(which respects the type parameter bounds, shown below.)
If this instance is a Right[Either[A, C]]
then the contained Either[A, C]
will be returned, otherwise this value will be returned unmodified.
- Example
Right[String, Either[String, Int]](Right(12)).joinRight // Result: Right(12) Right[String, Either[String, Int]](Left("flower")).joinRight // Result: Left("flower") Left[String, Either[String, Int]]("flower").joinRight // Result: Left("flower")
This method, and
joinLeft
, are analogous toOption#flatten
- Inherited from
- Either
- Source
- Either.scala
Projects this Either
as a Left
.
Projects this Either
as a Left
.
This allows for-comprehensions over the left side of Either
instances,
reversing Either
's usual right-bias.
For example
for (s <- Left("flower").left) yield s.length // Left(6)
Continuing the analogy with scala.Option, a LeftProjection
declares
that Left
should be analogous to Some
in some code.
// using Option
def interactWithDB(x: Query): Option[Result] =
try Some(getResultFromDatabase(x))
catch {
case _: SQLException => None
}
// this will only be executed if interactWithDB returns a Some
val report = for (result <- interactWithDB(someQuery)) yield generateReport(result)
report match {
case Some(r) => send(r)
case None => log("report not generated, not sure why...")
}
// using Either
def interactWithDB(x: Query): Either[Exception, Result] =
try Right(getResultFromDatabase(x))
catch {
case e: SQLException => Left(e)
}
// run a report only if interactWithDB returns a Right
val report = for (result <- interactWithDB(someQuery)) yield generateReport(result)
report match {
case Right(r) => send(r)
case Left(e) => log(s"report not generated, reason was $e")
}
// only report errors
for (e <- interactWithDB(someQuery).left) log(s"query failed, reason was $e")
- Inherited from
- Either
- Source
- Either.scala
The given function is applied if this is a Right
.
The given function is applied if this is a Right
.
Right(12).map(x => "flower") // Result: Right("flower")
Left(12).map(x => "flower") // Result: Left(12)
- Inherited from
- Either
- Source
- Either.scala
Returns this Right
or the given argument if this is a Left
.
Returns this Right
or the given argument if this is a Left
.
Right(1) orElse Left(2) // Right(1)
Left(1) orElse Left(2) // Left(2)
Left(1) orElse Left(2) orElse Right(3) // Right(3)
- Inherited from
- Either
- Source
- Either.scala
An iterator over the names of all the elements of this product.
An iterator over the names of all the elements of this product.
- Inherited from
- Product
- Source
- Product.scala
An iterator over all the elements of this product.
An iterator over all the elements of this product.
- Returns
in the default implementation, an
Iterator[Any]
- Inherited from
- Product
- Source
- Product.scala
If this is a Left
, then return the left value in Right
or vice versa.
If this is a Left
, then return the left value in Right
or vice versa.
- Example
val left: Either[String, Int] = Left("left") val right: Either[Int, String] = left.swap // Result: Right("left")
val right = Right(2) val left = Left(3) for { r1 <- right r2 <- left.swap } yield r1 * r2 // Right(6)
- Inherited from
- Either
- Source
- Either.scala
Returns a Some
containing the Right
value
if it exists or a None
if this is a Left
.
Returns a Some
containing the Right
value
if it exists or a None
if this is a Left
.
Right(12).toOption // Some(12)
Left(12).toOption // None
- Inherited from
- Either
- Source
- Either.scala
Returns a Seq
containing the Right
value if
it exists or an empty Seq
if this is a Left
.
Returns a Seq
containing the Right
value if
it exists or an empty Seq
if this is a Left
.
Right(12).toSeq // Seq(12)
Left(12).toSeq // Seq()
- Inherited from
- Either
- Source
- Either.scala
Deprecated and Inherited methods
Projects this Either
as a Right
.
Projects this Either
as a Right
.
Because Either
is right-biased, this method is not normally needed.
- Deprecated
- Inherited from
- Either
- Source
- Either.scala