docs: Add two faq entries about the type system
This commit is contained in:
@@ -429,6 +429,46 @@ if $b {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### What is the difference `types.Value.Str()` and `types.Value.String()`?
|
||||||
|
|
||||||
|
In the `lang/types` library, there is a `types.Value` interface. Every value in
|
||||||
|
our type system must implement this interface. One of the methods in this
|
||||||
|
interface is the `String() string` method. This lets you print a representation
|
||||||
|
of the value. You will probably never need to use this method.
|
||||||
|
|
||||||
|
In addition, the `types.Value` interface implements a number of helper functions
|
||||||
|
which return the value as an equivalent golang type. If you know that the value
|
||||||
|
is a `bool`, you can call `x.Bool()` on it. If it's a `string` you can call
|
||||||
|
`x.Str()`. Make sure not to call one of those type methods unless you know the
|
||||||
|
value is of that type, or you will trigger a panic!
|
||||||
|
|
||||||
|
### I created a `&ListValue{}` but it's not working!
|
||||||
|
|
||||||
|
If you create a base type like `bool`, `str`, `int`, or `float`, all you need to
|
||||||
|
do is build the `&BoolValue` and set the `V` field. Eg:
|
||||||
|
|
||||||
|
```golang
|
||||||
|
someBool := &types.BoolValue{V: true}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are building a container type like `list`, `map`, `struct`, or `func`,
|
||||||
|
then you *also* need to specify the type of the contained values. This is
|
||||||
|
because a list has a type of `[]str`, or `[]int`, or even `[][]foo`. Eg:
|
||||||
|
|
||||||
|
```golang
|
||||||
|
someListOfStrings := &types.ListValue{
|
||||||
|
T: types.NewType("[]str"), # must match the contents!
|
||||||
|
V: []types.Value{
|
||||||
|
&types.StrValue{V: "a"},
|
||||||
|
&types.StrValue{V: "bb"},
|
||||||
|
&types.StrValue{V: "ccc"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you don't build these properly, then you will cause a panic! Even empty lists
|
||||||
|
have a type.
|
||||||
|
|
||||||
### I don't like the mgmt language, is there an alternative?
|
### I don't like the mgmt language, is there an alternative?
|
||||||
|
|
||||||
Yes, the language is just one of the available "frontends" that passes a stream
|
Yes, the language is just one of the available "frontends" that passes a stream
|
||||||
|
|||||||
Reference in New Issue
Block a user