ResultTypes
ResultTypes provides a Result
type which can hold either a value or an error. This allows us to return a value or an error in a type-stable manner without throwing an exception.
Usage
Basic
We can construct a Result
that holds a value:
julia> x = Result(2); typeof(x)
ResultTypes.Result{Int64,Exception}
or a Result
that holds an error:
julia> x = ErrorResult(Int, "Oh noes!"); typeof(x)
ResultTypes.Result{Int64,ErrorException}
or either with a different error type:
julia> x = Result(2, DivideError); typeof(x)
ResultTypes.Result{Int64,DivideError}
julia> x = ErrorResult(Int, DivideError()); typeof(x)
ResultTypes.Result{Int64,DivideError}
Exploiting Function Return Types
We can take advantage of automatic conversions in function returns (a Julia 0.5 feature):
julia> function integer_division(x::Int, y::Int)::Result{Int, DivideError}
if y == 0
return DivideError()
else
return div(x, y)
end
end
integer_division (generic function with 1 method)
This allows us to write code in the body of the function that returns either a value or an error without manually constructing Result
types.
julia> integer_division(3, 4)
Result(0)
julia> integer_division(3, 0)
ErrorResult(Int64, DivideError())