mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-17 11:12:28 +08:00
feat: add Compose in function.go
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
// Copyright 2021 dudaodong@gmail.com. All rights reserved.
|
// Copyright 2021 dudaodong@gmail.com. All rights reserved.
|
||||||
// Use of this source code is governed by MIT license
|
// Use of this source code is governed by MIT license
|
||||||
|
|
||||||
// Package function implements some functions for functional programming.
|
// Package function implements some functions for control the function execution and some is for functional programming.
|
||||||
|
|
||||||
package function
|
package function
|
||||||
|
|
||||||
@@ -47,7 +47,22 @@ func (f Fn) Curry(i interface{}) func(...interface{}) interface{} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delay make the function excution after delayed time
|
// Compose compose the functions from right to left
|
||||||
|
func Compose(fnList ...func(...string) string) func(...string) string {
|
||||||
|
return func(s... string) string {
|
||||||
|
f := fnList[0]
|
||||||
|
restFn := fnList[1:]
|
||||||
|
|
||||||
|
if len(fnList) == 1 {
|
||||||
|
return f(s...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return f(Compose(restFn...)(s...))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Delay make the function execution after delayed time
|
||||||
func Delay(delay time.Duration, fn interface{}, args ...interface{}) {
|
func Delay(delay time.Duration, fn interface{}, args ...interface{}) {
|
||||||
time.Sleep(delay)
|
time.Sleep(delay)
|
||||||
invokeFunc(fn, args...)
|
invokeFunc(fn, args...)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package function
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -69,6 +70,26 @@ func TestCurry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCompose(t *testing.T) {
|
||||||
|
toUpper := func(a... string) string {
|
||||||
|
return strings.ToUpper(a[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
toLower := func(a... string) string {
|
||||||
|
return strings.ToLower(a[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
expect := toUpper(toLower("aBCde"))
|
||||||
|
cf := Compose(toUpper, toLower)
|
||||||
|
res := cf("aBCde")
|
||||||
|
|
||||||
|
fmt.Println(res, expect)
|
||||||
|
if res != expect {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func TestDelay(t *testing.T) {
|
func TestDelay(t *testing.T) {
|
||||||
var print = func(s string) {
|
var print = func(s string) {
|
||||||
fmt.Println(s)
|
fmt.Println(s)
|
||||||
|
|||||||
Reference in New Issue
Block a user