class RbScheme::Primitive::Procedure
Attributes
arg_list[R]
func[R]
name[R]
required_arg_num[R]
Public Class Methods
new(attrs = {})
click to toggle source
# File lib/rb-scheme/primitive/procedure.rb, line 6 def initialize(attrs = {}) @name = attrs[:name] @func = attrs[:func] parse_parameter_info(attrs[:func]) end
Public Instance Methods
call(args)
click to toggle source
# File lib/rb-scheme/primitive/procedure.rb, line 12 def call(args) check_arg_num!(args) func.call(*args) end
Private Instance Methods
check_arg_num!(args)
click to toggle source
# File lib/rb-scheme/primitive/procedure.rb, line 32 def check_arg_num!(args) if required_arg_num > args.count message = arg_list ? "primitive procedure #{name}: required at least #{required_arg_num} arguments, got #{args.count}" : "primitive procedure #{name}: required #{required_arg_num} arguments, got #{args.count}" raise ArgumentError, message end end
parse_parameter_info(fn)
click to toggle source
# File lib/rb-scheme/primitive/procedure.rb, line 19 def parse_parameter_info(fn) @required_arg_num = 0 fn.parameters.each do |p| param_type = p[0] case param_type when :req @required_arg_num += 1 when :rest @arg_list = true end end end