实现思路
- 定义一个
map
用于存储函数,键为函数名,值为 reflect.Value
类型,通过 reflect.ValueOf
获取函数的 reflect.Value
并存储。
- 获取用户输入的函数名,从
map
中根据函数名取出对应的 reflect.Value
。
- 对用户输入的参数进行处理,转换为
[]reflect.Value
类型,这需要根据函数的参数类型信息来进行。
- 使用取出的
reflect.Value
调用 Call
方法执行函数,传递处理后的参数。
- 处理函数的返回值,将
[]reflect.Value
类型的返回值转换为合适的类型进行返回或处理。
核心代码片段(以Go语言为例)
package main
import (
"fmt"
"reflect"
)
// 定义一些不同参数和返回值类型的函数
func add(a, b int) int {
return a + b
}
func greet(name string) string {
return "Hello, " + name
}
func main() {
// 使用map存储函数
functionMap := make(map[string]reflect.Value)
functionMap["add"] = reflect.ValueOf(add)
functionMap["greet"] = reflect.ValueOf(greet)
// 模拟用户输入函数名
functionName := "add"
// 模拟用户输入参数
args := []interface{}{1, 2}
// 从map中取出函数
function, ok := functionMap[functionName]
if!ok {
fmt.Println("Function not found")
return
}
// 处理参数
var reflectArgs []reflect.Value
for _, arg := range args {
reflectArgs = append(reflectArgs, reflect.ValueOf(arg))
}
// 调用函数
results := function.Call(reflectArgs)
// 处理返回值
for _, result := range results {
fmt.Println(result.Interface())
}
}