Julia MethodError求助:闭包调用参数形式不匹配问题
Julia MethodError:闭包参数不匹配问题解决
你的错误核心是闭包closure2定义为接收两个独立参数,但调用时传入了一个元组,导致Julia找不到匹配的方法。以下是三种可行的解决方式:
方法1:直接传入两个独立参数
既然闭包设计成接收theta和p两个参数,调用时直接分开传即可,不用打包成元组:
# 替换原来的 nll((theta0,p0)) nll(theta0, p0)
方法2:修改闭包定义以接收元组参数
如果必须以元组形式传入参数(比如某些优化库的要求),可以修改闭包的参数定义,让它接收元组并解构:
function make_closures(w_train,b_train) # 直接解构元组参数 closure2((theta, p)) = -L_alpha_1d(w_train,b_train,theta, p) # 或者用可变参数语法,兼容更多传入形式 # closure2(args...) = -L_alpha_1d(w_train,b_train,args...) return closure2 end
修改后,nll((theta0,p0))就能正常调用。
方法3:调用时展开元组参数
如果不想修改闭包定义,也可以在调用时用...语法把元组展开成独立参数:
# 展开元组,将内部元素作为独立参数传入 nll((theta0,p0)...)
内容的提问来源于stack exchange,提问作者AVEbrahimi
相关产品推荐
相关产品推荐

