Julia中如何无需定义新函数传递部分指定参数的函数作为参数
Julia中传递部分参数绑定的函数作为参数的优雅方式
你可以通过以下两种方式无需定义新函数实现需求:
1. 使用匿名函数
这是处理关键字参数部分绑定最直观的方式,直接在调用func2时定义匿名函数,将固定的关键字参数传入:
func1(a, b) = println(a, b) func2(a, func::Function) = func(a) # 匿名函数绑定b=0,传递给func2 func2(1, a -> func1(a, b=0)) # 输出:10
2. 使用Base.Fix2(适用于位置参数固定场景)
如果需要固定的是位置参数而非关键字参数,可以用Julia内置的Base.Fix2(固定第二个位置参数)或Base.Fix1(固定第一个位置参数):
# 固定func1的第二个位置参数为0 func2(1, Fix2(func1, 0)) # 输出:10
原代码报错原因
你之前写func2(1, func1(b=0))会报错,是因为func1(b=0)会直接尝试调用func1,但此时缺少必要的a参数,导致调用失败。我们需要传递的是一个待执行的函数对象,而非函数调用的结果。
内容的提问来源于stack exchange,提问作者PokeLu
相关产品推荐
相关产品推荐

