44 lines
728 B
Go
44 lines
728 B
Go
package object
|
|
|
|
import "fmt"
|
|
|
|
// Module is the module type used to represent a collection of variabels.
|
|
type Module struct {
|
|
Name string
|
|
Attrs Object
|
|
}
|
|
|
|
func (m Module) String() string {
|
|
return m.Inspect()
|
|
}
|
|
|
|
func (m Module) Type() Type {
|
|
return ModuleType
|
|
}
|
|
|
|
func (m Module) Bool() bool {
|
|
return true
|
|
}
|
|
|
|
func (m Module) Inspect() string {
|
|
return fmt.Sprintf("<module '%s'>", m.Name)
|
|
}
|
|
|
|
func (m Module) Get(index Object) (Object, error) {
|
|
key, ok := index.(Hasher)
|
|
if !ok {
|
|
return nil, fmt.Errorf("invalid module attribute %s", index.Type())
|
|
}
|
|
|
|
attr, found := m.Attrs.(*Hash).Pairs[key.Hash()]
|
|
if !found {
|
|
return Null{}, nil
|
|
}
|
|
|
|
return attr.Value, nil
|
|
}
|
|
|
|
func (m Module) Compare(other Object) int {
|
|
return 1
|
|
}
|