Test for functional argument passing (#336)

* Test for functional argument passing
Этот коммит содержится в:
seph 2019-05-13 08:40:58 -04:00 коммит произвёл Ron Evans
родитель 8d3f19bc84
коммит a4cd3bb77c
2 изменённых файлов: 24 добавлений и 0 удалений

22
testdata/calls.go предоставленный
Просмотреть файл

@ -4,6 +4,22 @@ type Thing struct {
name string
}
type ThingOption func(*Thing)
func WithName(name string) ThingOption {
return func(t *Thing) {
t.name = name
}
}
func NewThing(opts ...ThingOption) *Thing {
t := &Thing{}
for _, opt := range opts {
opt(t)
}
return t
}
func (t Thing) String() string {
return t.name
}
@ -36,6 +52,12 @@ func main() {
runFunc(func(i int) {
println("inside fp closure:", thing.String(), i)
}, 3)
// functional arguments
thingFunctionalArgs1 := NewThing()
thingFunctionalArgs1.Print("functional args 1")
thingFunctionalArgs2 := NewThing(WithName("named thing"))
thingFunctionalArgs2.Print("functional args 2")
}
func runFunc(f func(int), arg int) {

2
testdata/calls.txt предоставленный
Просмотреть файл

@ -7,3 +7,5 @@ Thing.Print: foo arg: bar
bound method: foo
thing inside closure: foo
inside fp closure: foo 3
Thing.Print: arg: functional args 1
Thing.Print: named thing arg: functional args 2