package objects // len(obj object) => int func builtinLen(args ...Object) (Object, error) { if len(args) != 1 { return nil, ErrWrongNumArguments } switch arg := args[0].(type) { case *Array: return &Int{Value: int64(len(arg.Value))}, nil case *ImmutableArray: return &Int{Value: int64(len(arg.Value))}, nil case *String: return &Int{Value: int64(len(arg.Value))}, nil case *Bytes: return &Int{Value: int64(len(arg.Value))}, nil case *Map: return &Int{Value: int64(len(arg.Value))}, nil case *ImmutableMap: return &Int{Value: int64(len(arg.Value))}, nil default: return nil, ErrInvalidArgumentType{ Name: "first", Expected: "array/string/bytes/map", Found: arg.TypeName(), } } }