Test for functional argument passing (#336)

* Test for functional argument passing
This commit is contained in:
seph
2019-05-13 08:40:58 -04:00
committed by Ron Evans
parent 8d3f19bc84
commit a4cd3bb77c
2 changed files with 24 additions and 0 deletions
+22
View File
@@ -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
View File
@@ -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