class Basic101::UserDefinedFunction
Public Class Methods
new(identifier, parameters, expression)
click to toggle source
# File lib/basic101/user_defined_function.rb, line 9 def initialize(identifier, parameters, expression) @identifier = identifier @parameters = parameters @expression = expression end
Public Instance Methods
call(runtime, args)
click to toggle source
# File lib/basic101/user_defined_function.rb, line 19 def call(runtime, args) raise InvalidArgumentError unless args.size == @parameters.size save_parameters(runtime) bind_arguments(runtime, args) result = @expression.eval(runtime) restore_parameters(runtime) result end
name()
click to toggle source
# File lib/basic101/user_defined_function.rb, line 15 def name @identifier.to_s end
Protected Instance Methods
state()
click to toggle source
# File lib/basic101/user_defined_function.rb, line 30 def state [@identifier, @parameters, @expression] end
Private Instance Methods
bind_arguments(runtime, args)
click to toggle source
# File lib/basic101/user_defined_function.rb, line 42 def bind_arguments(runtime, args) @parameters.zip(args).each do |parameter, arg| parameter.assign(runtime, arg.eval(runtime)) end end
restore_parameters(runtime)
click to toggle source
# File lib/basic101/user_defined_function.rb, line 48 def restore_parameters(runtime) @parameters.zip(@original_parameter_values) do |parameter, value| parameter.assign(runtime, value) end end
save_parameters(runtime)
click to toggle source
# File lib/basic101/user_defined_function.rb, line 36 def save_parameters(runtime) @original_parameter_values = @parameters.map do |parameter| parameter.eval(runtime) end end