Returns true
if this is a Left
, false
otherwise.
Returns true
if this is a Left
, false
otherwise.
Left("tulip").isLeft // true
Right("venus fly-trap").isLeft // false
Attributes
Returns true
if this is a Right
, false
otherwise.
Returns true
if this is a Right
, false
otherwise.
Left("tulip").isRight // false
Right("venus fly-trap").isRight // true
Attributes
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]
Attributes
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 parameters
the element to test.
true
if this is a Right
value equal to elem
.
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
Attributes
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)
Attributes
Binds the given function across Right
.
Binds the given function across Right
.
The function to bind across Right
.
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
Attributesval 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)
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
.
the function to apply if this is a Left
the function to apply if this is a Right
the results of applying the function
val result = util.Try("42".toInt).toEither
result.fold(
e => s"Operation failed with $e",
v => s"Operation produced value: $v"
)
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
Attributes
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 parameters
The side-effecting function to execute.
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
Attributes
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:
(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
.
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:
(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.
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 to Option#flatten
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")
Attributes
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)
Attributes
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)
Attributes
An iterator over the names of all the elements of this product.
An iterator over the names of all the elements of this product.
AttributesAn iterator over all the elements of this product.
An iterator over all the elements of this product.
Attributesin the default implementation, an Iterator[Any]
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.
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)
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
Attributes
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()
Attributes
Projects this Either
as a Right
.
Projects this Either
as a Right
.
Because Either
is right-biased, this method is not normally needed.
[Since version 2.13.0]
Either is now right-biased, use methods directly on Either
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4