- What would be the proper effect to represent getting each of the following:
- The first element of some List: Option[?] with None representing an empty list does not have a head element
- A list of tweets: Future[List[Tweet]] as the operation will probably take some time as it goes over the network
- User information from the database for a given userId: Future[Option[?]] with Future denoting the network call and Option denoting no user account for a given userId
- What is a range of possible values of the following expression: Option(scala.util.Random.nextInt(10)).fold(9)(_-1)
An inclusive [-1;9]
- What will be the result of the following expression:
Try[Int](throw new OutOfMemoryError()).filter(_ > 10).recover {
case _: OutOfMemoryError => 100
}(20)
The Try constructor will not catch an OutOfMemoryError, hence the given expression will throw the OutOfMemoryError.
- Describe the result of the following expression:
Future[Int](throw new OutOfMemoryError()).filter(_ > 10).recover {
case _: OutOfMemoryError => 100
}
The result of the expression will be Future(<not completed>) which will eventually throw an OutOfMemoryError, as in the previous case.
- Given the following function:
def either(i: Int): Boolean =
Either.cond(i > 10, i * 10, new IllegalArgumentException("Give me more")).forall(_ < 100)
- What would be the result of the following call: either(1) ?
The result will be true because Either.cond evaluates to Left for i == 2 and Left.forall evaluates to true for any Left.