package main import "fmt" type Class struct { name string } type ClassInstance struct { klass *Class props map[string]any } func (c *ClassInstance) String() string { return fmt.Sprintf("instance of %s", c.klass.name) } func (c *ClassInstance) get(name string) (any, bool) { val, ok := c.props[name] return val, ok } func (c *ClassInstance) set(name string, val any) { c.props[name] = val } func (c *Class) arity() int { return 0 } func (c *Class) call(i *Interpreter, args ...any) (ret any) { return &ClassInstance{c, map[string]any{}} } func (c *Class) String() string { return c.name }