Using the Option way
Let's try and change the function signature in a way that we can reason about and modify it so that it does what it says:
def toInt(str: String): Option[Int] = Try(str.toInt) match { case Success(value) => Some(value) case Failure(_) => None }
In the preceding definition, we knew that the response was optional. We might or might not get a corresponding integer value for every string we pass to our function. Hence, we made the response type an Option[Int]
. Also, as you may have noticed, we used another construct available to us from the scala.util
package, named Try
. How do we use Try
? We pass a function for its evaluation to the Try
block's constructor/apply method. As might be obvious, the Try
block's apply
method takes a function as a by-name
parameter, which tries to evaluate that function. Based on the result or exception, it responds as a Success(value)
or Failure(exception)
.
We used the Try
 construct and passed logic as an argument. On success, we responded...