Documentation ¶
Overview ¶
Package vals contains basic facilities for manipulating values used in the Elvish runtime.
Index ¶
- Constants
- Variables
- func Assoc(a, k, v interface{}) (interface{}, error)
- func Bool(v interface{}) bool
- func CanIterate(v interface{}) bool
- func Collect(it interface{}) ([]interface{}, error)
- func Concat(lhs, rhs interface{}) (interface{}, error)
- func Dissoc(a, k interface{}) interface{}
- func Equal(x, y interface{}) bool
- func FromGo(a interface{}) interface{}
- func HasKey(container, key interface{}) bool
- func Hash(v interface{}) uint32
- func Index(a, k interface{}) (interface{}, error)
- func Iterate(v interface{}, f func(interface{}) bool) error
- func IterateKeys(v interface{}, f func(interface{}) bool) error
- func Kind(v interface{}) string
- func Len(v interface{}) int
- func MakeList(vs ...interface{}) vector.Vector
- func MakeMap(a ...interface{}) hashmap.Map
- func NoSuchKey(k interface{}) error
- func Repr(v interface{}, indent int) string
- func ScanToGo(src interface{}, ptr interface{}) error
- func ToString(v interface{}) string
- func TypeOf(i interface{}) reflect.Type
- func ValueOf(i interface{}) reflect.Value
- type Assocer
- type Booler
- type Concatter
- type Dissocer
- type Equaler
- type ErrIndexer
- type File
- type HasKeyer
- type Hasher
- type Indexer
- type Iterator
- type KeysIterator
- type Kinder
- type Lener
- type List
- type ListIndex
- type ListReprBuilder
- type Map
- type MapReprBuilder
- type Pipe
- type RConcatter
- type Reprer
- type Scanner
- type Stringer
- type StructMap
- type StructMapMarker
Constants ¶
const NoPretty = util.MinInt
NoPretty can be passed to Repr to suppress pretty-printing.
Variables ¶
var EmptyList = vector.Empty
EmptyList is an empty list.
var EmptyMap = hashmap.New(Equal, Hash)
EmptyMap is an empty map.
var ErrConcatNotImplemented = errors.New("concat not implemented")
ErrConcatNotImplemented is a special error value used to signal that concatenation is not implemented. See Concat for how it is used.
Functions ¶
func Assoc ¶
func Assoc(a, k, v interface{}) (interface{}, error)
Assoc takes a container, a key and value, and returns a modified version of the container, in which the key associated with the value. It is implemented for the builtin type string, List and Map types, StructMap types, and types satisfying the Assocer interface. For other types, it returns an error.
func Bool ¶
func Bool(v interface{}) bool
Bool converts a value to bool. It is implemented for nil, the builtin bool type, and types implementing the Booler interface. For all other values, it returns true.
func CanIterate ¶
func CanIterate(v interface{}) bool
CanIterate returns whether the value can be iterated. If CanIterate(v) is true, calling Iterate(v, f) will not result in an error.
func Collect ¶
func Collect(it interface{}) ([]interface{}, error)
Collect collects all elements of an iterable value into a slice.
func Concat ¶
func Concat(lhs, rhs interface{}) (interface{}, error)
Concat concatenates two values. If both operands are strings, it returns lhs + rhs, nil. If the left operand implements Concatter, it calls lhs.Concat(rhs). If lhs doesn't implement the interface or returned ErrConcatNotImplemented, it then calls rhs.RConcat(lhs). If all attempts fail, it returns nil and an error.
func Dissoc ¶
func Dissoc(a, k interface{}) interface{}
Dissoc takes a container and a key, and returns a modified version of the container, with the given key dissociated with any value. It is implemented for the Map type and types satisfying the Dissocer interface. For other types, it returns nil.
func Equal ¶
func Equal(x, y interface{}) bool
Equal returns whether two values are equal. It is implemented for the builtin types bool and string, the File, List, Map types, StructMap types, and types satisfying the Equaler interface. For other types, it uses reflect.DeepEqual to compare the two values.
func FromGo ¶
func FromGo(a interface{}) interface{}
FromGo converts a Go value to an Elvish value. Conversion happens when the argument is int, float64 or rune (this is consistent with ScanToGo). In other cases, this function just returns the argument.
func HasKey ¶
func HasKey(container, key interface{}) bool
HasKey returns whether a container has a key. It is implemented for the Map type, StructMap types, and types satisfying the HasKeyer interface. It falls back to iterating keys using IterateKeys, and if that fails, it falls back to calling Len and checking if key is a valid numeric or slice index. Otherwise it returns false.
func Hash ¶
func Hash(v interface{}) uint32
Hash returns the 32-bit hash of a value. It is implemented for the builtin types bool and string, the File, List, Map types, StructMap types, and types satisfying the Hasher interface. For other values, it returns 0 (which is OK in terms of correctness).
func Index ¶
func Index(a, k interface{}) (interface{}, error)
Index indexes a value with the given key. It is implemented for the builtin type string, the List type, StructMap types, and types satisfying the ErrIndexer or Indexer interface (the Map type satisfies Indexer). For other types, it returns a nil value and a non-nil error.
func Iterate ¶
Iterate iterates the supplied value, and calls the supplied function in each of its elements. The function can return false to break the iteration. It is implemented for the builtin type string, the List type, and types satisfying the Iterator interface. For these types, it always returns a nil error. For other types, it doesn't do anything and returns an error.
func IterateKeys ¶
IterateKeys iterates the keys of the supplied value, calling the supplied function for each key. The function can return false to break the iteration. It is implemented for the Map type, StructMap types, and types satisfying the IterateKeyser interface. For these types, it always returns a nil error. For other types, it doesn't do anything and returns an error.
func Kind ¶
func Kind(v interface{}) string
Kind returns the "kind" of the value, a concept similar to type but not yet very well defined. It is implemented for the builtin nil, bool and string, the File, List, Map types, StructMap types, and types satisfying the Kinder interface. For other types, it returns the Go type name of the argument preceded by "!!".
func Len ¶
func Len(v interface{}) int
Len returns the length of the value, or -1 if the value does not have a well-defined length. It is implemented for the builtin type string, StructMap types, and types satisfying the Lener interface. For other types, it returns -1.
func MakeMap ¶
MakeMap creates a map from arguments that are alternately keys and values. It panics if the number of arguments is odd.
func NoSuchKey ¶
func NoSuchKey(k interface{}) error
NoSuchKey returns an error indicating that a key is not found in a map-like value.
func Repr ¶
Repr returns the representation for a value, a string that is preferably (but not necessarily) an Elvish expression that evaluates to the argument. If indent >= 0, the representation is pretty-printed. It is implemented for the builtin types nil, bool and string, the File, List and Map types, StructMap types, and types satisfying the Reprer interface. For other types, it uses fmt.Sprint with the format "<unknown %v>".
func ScanToGo ¶
func ScanToGo(src interface{}, ptr interface{}) error
ScanToGo converts an Elvish value to a Go value. the pointer points to. It uses the type of the pointer to determine the destination type, and puts the converted value in the location the pointer points to. Conversion only happens when the destination type is int, float64 or rune; in other cases, this function just checks that the source value is already assignable to the destination.
func ToString ¶
func ToString(v interface{}) string
ToString converts a Value to string. It is implemented for the builtin float64 and string types, and type satisfying the Stringer interface. It falls back to Repr(v, NoPretty).
Types ¶
type Assocer ¶
type Assocer interface { // Assoc returns a slightly modified version of the receiver with key k // associated with value v. Assoc(k, v interface{}) (interface{}, error) }
Assocer wraps the Assoc method.
type Booler ¶
type Booler interface { // Bool computes the truth value of the receiver. Bool() bool }
Booler wraps the Bool method.
type Concatter ¶
type Concatter interface { // Concat concatenates the receiver with another value, the receiver being // the left operand. If concatenation is not supported for the given value, // the method can return the special error type ErrCatNotImplemented. Concat(v interface{}) (interface{}, error) }
Concatter wraps the Concat method. See Concat for how it is used.
type Dissocer ¶
type Dissocer interface { // Dissoc returns a slightly modified version of the receiver with key k // dissociated with any value. Dissoc(k interface{}) interface{} }
Dissocer wraps the Dissoc method.
type Equaler ¶
type Equaler interface { // Equal compares the receiver to another value. Two equal values must have // the same hash code. Equal(other interface{}) bool }
Equaler wraps the Equal method.
type ErrIndexer ¶
type ErrIndexer interface { // Index retrieves one value from the receiver at the specified index. Index(k interface{}) (interface{}, error) }
ErrIndexer wraps the Index method.
type HasKeyer ¶
type HasKeyer interface { // HasKey returns whether the receiver has the given argument as a valid // key. HasKey(interface{}) bool }
HasKeyer wraps the HasKey method.
type Hasher ¶
type Hasher interface { // Hash computes the hash code of the receiver. Hash() uint32 }
Hasher wraps the Hash method.
type Indexer ¶
type Indexer interface { // Index retrieves the value corresponding to the specified key in the // container. It returns the value (if any), and whether it actually exists. Index(k interface{}) (v interface{}, ok bool) }
Indexer wraps the Index method.
type Iterator ¶
type Iterator interface { // Iterate calls the passed function with each value within the receiver. // The iteration is aborted if the function returns false. Iterate(func(v interface{}) bool) }
Iterator wraps the Iterate method.
type KeysIterator ¶
type KeysIterator interface { // IterateKeys calls the passed function with each key within the receiver. // The iteration is aborted if the function returns false. IterateKeys(func(v interface{}) bool) }
KeysIterator wraps the IterateKeys method.
type Lener ¶
type Lener interface { // Len computes the length of the receiver. Len() int }
Lener wraps the Len method.
type ListIndex ¶
ListIndex represents a (converted) list index.
func ConvertListIndex ¶
ConvertListIndex parses a list index, check whether it is valid, and returns the converted structure.
type ListReprBuilder ¶
type ListReprBuilder struct {
// contains filtered or unexported fields
}
ListReprBuilder helps to build Repr of list-like Values.
func NewListReprBuilder ¶
func NewListReprBuilder(indent int) *ListReprBuilder
NewListReprBuilder makes a new ListReprBuilder.
func (*ListReprBuilder) String ¶
func (b *ListReprBuilder) String() string
String returns the representation that has been built. After it is called, the ListReprBuilder may no longer be used.
func (*ListReprBuilder) WriteElem ¶
func (b *ListReprBuilder) WriteElem(v string)
WriteElem writes a new element.
type MapReprBuilder ¶
type MapReprBuilder struct {
// contains filtered or unexported fields
}
MapReprBuilder helps building the Repr of a Map. It is also useful for implementing other Map-like values. The zero value of a MapReprBuilder is ready to use.
func NewMapReprBuilder ¶
func NewMapReprBuilder(indent int) *MapReprBuilder
NewMapReprBuilder makes a new MapReprBuilder.
func (*MapReprBuilder) String ¶
func (b *MapReprBuilder) String() string
String returns the representation that has been built. After it is called, the MapReprBuilder should no longer be used.
type Pipe ¶
Pipe wraps a pair of pointers to os.File that are the two ends of the same pipe.
type RConcatter ¶
type RConcatter interface {
RConcat(v interface{}) (interface{}, error)
}
RConcatter wraps the RConcat method. See Concat for how it is used.
type Reprer ¶
type Reprer interface { // Repr returns a string that represents a Value. The string either be a // literal of that Value that is preferably deep-equal to it (like `[a b c]` // for a list), or a string enclosed in "<>" containing the kind and // identity of the Value(like `<fn 0xdeadcafe>`). // // If indent is at least 0, it should be pretty-printed with the current // indentation level of indent; the indent of the first line has already // been written and shall not be written in Repr. The returned string // should never contain a trailing newline. Repr(indent int) string }
Reprer wraps the Repr method.
type Scanner ¶
type Scanner interface {
ScanElvish(interface{}) error
}
Scanner is implemented by types that can scan an Elvish value into itself.
type Stringer ¶
type Stringer interface { // Stringer converts the receiver to a string. String() string }
Stringer wraps the String method.
type StructMap ¶
type StructMap interface {
IsStructMap(StructMapMarker)
}
StructMap wraps the IsStructMap method, a marker to make some Elvish operations work on structs via reflection. The operations are Kind, Equal, Hash, Repr, Len, Index, Assoc, IterateKeys and HasKey.
The marker method must be implemented on the value type of a struct (not the pointer, or any other type), otherwise operations on such values may panic. The struct may not contain cyclic data, and all the fields of the struct must be exported. Elvish reuses the `json:"name" annotations of the fields as the name of the Elvish fields in the Elvish operations.
type StructMapMarker ¶
type StructMapMarker struct{}
StructMapMarker is used in the marker method IsStructMap.