package demo
import "math"
/*
@Author:David Ma
@Content:将函数当做参数进行方法传参
@Date:2020-12-03 10:46
*/
// step1 :先定义一个对应的函数类型,方便将函数作为一种类型进行传参
type MyFunctionType func(int) bool
// step2:定义测试函数 IsOdd(int)
func IsOdd(num int) bool {
if num % 2 == 0{
return false
}
return true
}
func IsSS(num int) bool {
sqrtOfNUm := math.Sqrt(float64(num))
for i:=2;float64(i)<=sqrtOfNUm;i++{
if num % i == 0{
return false
}
}
return true
}
package test
import (
"../demo"
"fmt"
"testing"
)
func TestFD(t *testing.T) {
t.Helper()
sf := func(t *testing.T,numList []int,f demo.MyFunctionType) (res []bool){
res1 := make([]bool, len(numList), len(numList))
for i, num := range numList{
res1[i] = f(num)
//res = append(res, f(num)) // 这里不用再采用:=的方式来定义res了,因为在返回值列表那里已经定义过了
}
return res1
}
t.Run("将函数当做参数进行传参", func(t *testing.T) {
numList := []int{1,2,3,4,5}
res := sf(t, numList, demo.IsOdd)
fmt.Printf("numList中为奇数的结果为: %v \n", res)
res2 := sf(t, numList, demo.IsSS)
fmt.Printf("numList中为素数的结果为: %v \n", res2)
})
}