Chervil is a toy Lisp interpreter written in Ruby
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

function.rb 778B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. module Chervil::AST
  2. class Function
  3. attr_reader :name
  4. attr_reader :params
  5. attr_reader :body
  6. def initialize(name, params, body)
  7. @name = name
  8. @params = params
  9. @body = body
  10. end
  11. def ==(other)
  12. @name == other.name && @params == other.params && @body == other.body
  13. end
  14. def evaluate(env)
  15. self
  16. end
  17. def call(args, env)
  18. unless @params.size == args.size
  19. raise "Expected #{params.size} arguments but received #{args.size}"
  20. end
  21. env = ::Chervil::Env.new(env)
  22. @params.zip(args).each do |key, value|
  23. env.set(key.name, value)
  24. end
  25. current_expr = nil
  26. @body.each do |expr|
  27. current_expr = expr.evaluate(env)
  28. end
  29. current_expr
  30. end
  31. end
  32. end