mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
add method Value() Value to InterfaceValue.
use Value() in print to print underlying value
from interface.
before:
package main
import "fmt"
func main() {
x := []interface{} {1, "hello", 2.5};
fmt.Println(x[0], x[1], x[2], x);
}
1 hello 2.5 [<non-nil interface> <non-nil interface> <non-nil interface>]
after:
1 hello 2.5 [1 hello 2.5]
R=r
DELTA=44 (22 added, 16 deleted, 6 changed)
OCL=27139
CL=27141
This commit is contained in:
parent
b80fdd1e3b
commit
ac6ebfdea9
4 changed files with 28 additions and 22 deletions
|
|
@ -34,6 +34,8 @@ type Value interface {
|
|||
Interface() interface {};
|
||||
}
|
||||
|
||||
func NewValue(e interface{}) Value;
|
||||
|
||||
// commonValue fields and functionality for all values
|
||||
|
||||
type commonValue struct {
|
||||
|
|
@ -744,6 +746,7 @@ func structCreator(typ Type, addr Addr) Value {
|
|||
type InterfaceValue interface {
|
||||
Value;
|
||||
Get() interface {}; // Get the underlying interface{} value.
|
||||
Value() Value;
|
||||
}
|
||||
|
||||
type interfaceValueStruct struct {
|
||||
|
|
@ -754,6 +757,14 @@ func (v *interfaceValueStruct) Get() interface{} {
|
|||
return *(*interface{})(v.addr)
|
||||
}
|
||||
|
||||
func (v *interfaceValueStruct) Value() Value {
|
||||
i := v.Get();
|
||||
if i == nil {
|
||||
return nil;
|
||||
}
|
||||
return NewValue(i);
|
||||
}
|
||||
|
||||
func interfaceCreator(typ Type, addr Addr) Value {
|
||||
return &interfaceValueStruct{ commonValue{InterfaceKind, typ, addr} }
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue