当我调用函数时,我在标题中得到错误,但是如果我直接执行函数体,则不会。这是我的函数的定义:
function sslogdensity(trial::ABtrial,σ²,ł,ρ²)
(id,Tobs,μg,y₀,y₁,yg,ξ₀ₐᵣ,ξ₀ᵣᵣ,ξ₁ₐᵣ,ξ₁ᵣᵣ,ξ₀ₐₐ,ξ₁ₐₐ,,g,gᵧ)=params(trial)
if(gᵧ==1)
return sslogdensity(yg,gᵧ,μg,σ²,ł,ρ²)
else
return 0
end
end
当我调用此函数时,我收到错误消息:
julia> typeof(trial)
ABtrial
julia> sslogdensity(trial,1.0,1.0,1.0)
ERROR: TypeError: non-boolean (Int64) used in boolean context
in sslogdensity at /home/grad/msl33/Dropbox/pprocess/statespace.jl:412
但如果我只是直接执行函数内部的代码就可以了
julia> (id,Tobs,μg,y₀,y₁,yg,ξ₀ₐᵣ,ξ₀ᵣᵣ,ξ₁ₐᵣ,ξ₁ᵣᵣ,ξ₀ₐₐ,ξ₁ₐₐ,,g,gᵧ)=params(trial);
julia> if(gᵧ==1)
return sslogdensity(yg,gᵧ,μg,σ²,ł,ρ²)
else
return 0
end
-322.1504448303596
有人可以向我提供有关此行为的任何解释吗?
编辑: 为了完整 错误消息中的行412对应于行
if(gᵧ==1)
和
function params(trial::ABtrial)
return (trial.id,trial.Tobs,trial.μg,trial.y₀,trial.y₁,trial.yg,trial.ξ₀ₐᵣ,trial.ξ₀ᵣᵣ,trial.ξ₁ₐᵣ,trial.ξ₁ᵣᵣ,trial.ξ₀ₐₐ,trial.ξ₁ₐₐ,trial.,trial.g,trial.gᵧ)
end
答案 0 :(得分:2)
如果没有更多信息(params
的定义;可能已添加到==
的任何方法),但由于代码中唯一的布尔上下文,因此很难说if
有条件的,让我们关注它。由于==
只是一个函数,因此可以根据其参数覆盖它。为了调试这个,我会在该行的正上方插入@show gᵧ, gᵧ==1
并查看打印的内容。 gᵧ
有某种价值,==
有一个奇怪的定义,即返回Int
而不是Bool
(如此CustomerUserProfile
应该)。
答案 1 :(得分:-1)
在REPL中执行代码时,变量是全局变量,编译器假设它们可以随时更改值和类型。然而,在函数中,类型通常是已知的,并且编译器将严格执行类型规则。
答案 2 :(得分:-1)
尝试使用return false
代替return 0
。 Julia倾向于不喜欢使用1和0来表示真/假。