GoCollections/lang/Object.go
2022-03-28 18:19:05 +08:00

76 lines
1006 B
Go

package lang
import (
"fmt"
"unsafe"
)
type (
AsObject interface {
AsObject() Object
}
Equable interface {
Equals(o Object) bool
}
Object interface {
fmt.Stringer
AsObject
Equable
HashCode() int32
}
Any = Object
BaseObject struct {
}
)
func ToString(obj Object) String {
return NewString(obj.String())
}
func Equals(e Object, t Object) bool {
if e == nil {
return t == nil
}
return e.Equals(t)
}
func HashCode(obj Object) int32 {
if obj == nil {
return 0
} else {
return obj.HashCode()
}
}
func NewBaseObject() BaseObject {
return BaseObject{}
}
func (b *BaseObject) AsObject() Object {
return b
}
func (b *BaseObject) Equals(o Object) bool {
return b == o
}
func (b *BaseObject) GoString() string {
return b.String()
}
func (b *BaseObject) String() string {
return fmt.Sprintf("BaseObject@%p", unsafe.Pointer(b))
}
func (b *BaseObject) ToString() String {
return NewString(b.String())
}
func (b *BaseObject) HashCode() int32 {
return Hash64(b)
}