The left side of the disjoint union, as opposed to the scala.util.Right side.
| Supertypes |
|---|
Returns true if this is a Left, false otherwise.
Left("tulip").isLeft // true
Right("venus fly-trap").isLeft // false
Returns true if this is a Right, false otherwise.
Left("tulip").isRight // false
Right("venus fly-trap").isRight // true
Upcasts this Left[A, B] to Either[A, B1]
Left(1) // Either[Int, Nothing] Left(1).withRight[String] // Either[Int, String]
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 parameters |
|
|---|---|
| Returns |
|
| Inherited from | Either |
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 |
|---|
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 |
|---|
Binds the given function across Right.
| Value parameters |
|
|---|---|
| Inherited from | Either |
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 |
|---|---|
| Inherited from | Either |
Applies fa if this is a Left or fb if this is a Right.
| Value parameters |
|
|---|---|
| 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 |
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 |
|---|
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 parameters |
|
|---|---|
| Inherited from | Either |
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 |
|---|
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 |
|---|
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 |
|---|---|
| Inherited from | Either |
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 |
|---|
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 |
|---|
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 |
|---|
An iterator over the names of all the elements of this product.
| Inherited from | Product |
|---|
An iterator over all the elements of this product.
| Returns | in the default implementation, an |
|---|---|
| Inherited from | Product |
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 |
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 |
|---|
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 |
|---|
| Inherited from | Either |
|---|
© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.2.0/scala/util/Left.html