environment.go 581 B

123456789101112131415161718192021222324252627282930
  1. package object
  2. func NewEnvironment() *Environment {
  3. s := make(map[string]Object)
  4. return &Environment{store: s, outer: nil}
  5. }
  6. func NewEnclosedEnvironment(outer *Environment) *Environment {
  7. env := NewEnvironment()
  8. env.outer = outer
  9. return env
  10. }
  11. type Environment struct {
  12. store map[string]Object
  13. outer *Environment
  14. }
  15. func (e *Environment) Get(name string) (Object, bool) {
  16. obj, ok := e.store[name]
  17. if !ok && e.outer != nil {
  18. obj, ok = e.outer.Get(name)
  19. }
  20. return obj, ok
  21. }
  22. func (e *Environment) Set(name string, val Object) Object {
  23. e.store[name] = val
  24. return val
  25. }