stack-underflow
This commit is contained in:
25
elixir/stack-underflow/lib/rpn_calculator/exception.ex
Normal file
25
elixir/stack-underflow/lib/rpn_calculator/exception.ex
Normal file
@@ -0,0 +1,25 @@
|
||||
defmodule RPNCalculator.Exception do
|
||||
defmodule DivisionByZeroError do
|
||||
defexception message: "division by zero occurred"
|
||||
end
|
||||
|
||||
defmodule StackUnderflowError do
|
||||
defexception message: "stack underflow occurred"
|
||||
|
||||
@impl true
|
||||
def exception(value) do
|
||||
case value do
|
||||
[] ->
|
||||
%StackUnderflowError{}
|
||||
|
||||
_ ->
|
||||
%StackUnderflowError{message: "stack underflow occurred, context: " <> value}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def divide([]), do: raise(StackUnderflowError, "when dividing")
|
||||
def divide([_]), do: raise(StackUnderflowError, "when dividing")
|
||||
def divide([0, _]), do: raise(DivisionByZeroError)
|
||||
def divide([x, y]), do: div(y, x)
|
||||
end
|
||||
Reference in New Issue
Block a user