Julia错误:TypeError:布尔上下文中使用的非布尔值(Int64)

时间:2016-02-20 22:23:36

标签: julia

当我调用函数时,我在标题中得到错误,但是如果我直接执行函数体,则不会。这是我的函数的定义:

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

3 个答案:

答案 0 :(得分:2)

如果没有更多信息(params的定义;可能已添加到==的任何方法),但由于代码中唯一的布尔上下文,因此很难说if有条件的,让我们关注它。由于==只是一个函数,因此可以根据其参数覆盖它。为了调试这个,我会在该行的正上方插入@show gᵧ, gᵧ==1并查看打印的内容。 gᵧ有某种价值,==有一个奇怪的定义,即返回Int而不是Bool(如此CustomerUserProfile应该)。

答案 1 :(得分:-1)

在REPL中执行代码时,变量是全局变量,编译器假设它们可以随时更改值和类型。然而,在函数中,类型通常是已知的,并且编译器将严格执行类型规则。

答案 2 :(得分:-1)

尝试使用return false代替return 0。 Julia倾向于不喜欢使用1和0来表示真/假。