将函数作为字典参数传入operateontable时,如何修改foo的b参数值?
如何在
operateontable中为foo函数传入不同的b参数值? 你的场景是通过operateontable调用带关键字参数的foo函数,当前调用方式为:
operateontable(operate on data a, Dict{String,Function}("foo" => foo))
foo函数定义如下:
function foo(a; b=10) print("value of b", b) end
你希望在调用时灵活传入不同的b值,以下是几种可行的实现方式:
方式一:使用匿名函数绑定固定参数
直接用匿名函数将b的值绑定后传入字典:
# 传入b=20的情况 operateontable(your_data, Dict{String,Function}("foo" => x -> foo(x; b=20))) # 传入b=30的情况 operateontable(your_data, Dict{String,Function}("foo" => x -> foo(x; b=30)))
匿名函数会接收表中的每一行数据x(对应foo的a参数),并带着绑定好的b值调用foo。
方式二:扩展字典存储结构传递参数配置
如果operateontable支持自定义调用逻辑,可以把函数和参数配置一起存入字典:
# 字典中存储(函数, 参数字典)的元组 func_config = Dict{String, Tuple{Function, Dict}}("foo" => (foo, Dict(:b => 20))) # 假设operateontable允许自定义处理逻辑,封装调用逻辑 operateontable(your_data, func_config) do func, kwargs, row_data func(row_data; kwargs...) end
这种方式适合动态调整多个参数的场景,但需要确保operateontable能适配这种自定义调用方式。
方式三:用闭包生成带固定参数的函数变体
如果需要频繁复用不同b值的foo,可以提前定义闭包生成函数:
function create_foo(b_val) return a -> foo(a; b=b_val) end # 生成不同b值的foo变体 foo_b20 = create_foo(20) foo_b30 = create_foo(30) # 传入operateontable使用 operateontable(your_data, Dict{String,Function}("foo" => foo_b20))
闭包会保留b_val的值,调用时无需额外传递参数。
内容的提问来源于stack exchange,提问作者F612
相关产品推荐
相关产品推荐

