class ReversePolishCalculator
Postfix notation
Constants
- EXAMPLES
- OPERATORS
Resources:
rubular.com/ en.wikipedia.org/wiki/Reverse_Polish_notation www.betterspecs.org/ ruby-doc.org/core-2.4.2/Object.html www.digitalocean.com/community/tutorials/how-to-package-and-distribute-ruby-applications-as-a-gem-using-rubygems
- VALID_EXITS
- VERSION
Attributes
evaluation[RW]
expression[RW]
Public Class Methods
new(expression = nil, evaluation = [])
click to toggle source
# File lib/reverse_polish_calculator.rb, line 27 def initialize(expression = nil, evaluation = []) @expression = expression @evaluation = evaluation end
Public Instance Methods
clear_evaluation()
click to toggle source
# File lib/reverse_polish_calculator.rb, line 66 def clear_evaluation @evaluation.clear end
evaluate()
click to toggle source
# File lib/reverse_polish_calculator.rb, line 39 def evaluate gather_input input_contains_valid_exit ? exit : evaluate_input end
evaluate_expression(array)
click to toggle source
# File lib/reverse_polish_calculator.rb, line 70 def evaluate_expression(array) array.each do |element| if element =~ /^[0-9].*$/ @evaluation.push(element.to_f) elsif OPERATORS.include? element raise 'You must have two operands before and per operator.' if @evaluation.length < 2 operands = @evaluation.pop(2) @evaluation.push(operands[0].send(element, operands[1])) else print_error(element) end end print_result end
evaluate_input()
click to toggle source
# File lib/reverse_polish_calculator.rb, line 53 def evaluate_input case @expression when 'help' print_operation_guide when 'clear' clear_evaluation when 'example' run_example else evaluate_expression(expression_array) end end
expression_array()
click to toggle source
# File lib/reverse_polish_calculator.rb, line 89 def expression_array @expression.split(' ') end
gather_input()
click to toggle source
# File lib/reverse_polish_calculator.rb, line 44 def gather_input print 'input expression > ' @expression = gets.strip.downcase end
input_contains_valid_exit()
click to toggle source
# File lib/reverse_polish_calculator.rb, line 49 def input_contains_valid_exit VALID_EXITS.include? @expression end
print_result()
click to toggle source
# File lib/reverse_polish_calculator.rb, line 85 def print_result puts "result: #{@evaluation.last}" end
run()
click to toggle source
# File lib/reverse_polish_calculator.rb, line 34 def run print_introduction evaluate until input_contains_valid_exit end