Julia 错误:类型错误:在布尔上下文中使用非布尔值 (Int64)

Lin*_*don 6 julia

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

\n\n
function sslogdensity(trial::ABtrial,\xcf\x83\xc2\xb2,\xc5\x82,\xcf\x81\xc2\xb2)\n    (id,Tobs,\xce\xbcg,y\xe2\x82\x80,y\xe2\x82\x81,yg,\xce\xbe\xe2\x82\x80\xe2\x82\x90\xe1\xb5\xa3,\xce\xbe\xe2\x82\x80\xe1\xb5\xa3\xe1\xb5\xa3,\xce\xbe\xe2\x82\x81\xe2\x82\x90\xe1\xb5\xa3,\xce\xbe\xe2\x82\x81\xe1\xb5\xa3\xe1\xb5\xa3,\xce\xbe\xe2\x82\x80\xe2\x82\x90\xe2\x82\x90,\xce\xbe\xe2\x82\x81\xe2\x82\x90\xe2\x82\x90,,g,g\xe1\xb5\xa7)=params(trial)\n    if(g\xe1\xb5\xa7==1)\n        return sslogdensity(yg,g\xe1\xb5\xa7,\xce\xbcg,\xcf\x83\xc2\xb2,\xc5\x82,\xcf\x81\xc2\xb2)\n    else\n        return 0\n    end\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我调用这个函数时,我收到错误消息:

\n\n
julia> typeof(trial)\nABtrial\n\njulia> sslogdensity(trial,1.0,1.0,1.0)\nERROR: TypeError: non-boolean (Int64) used in boolean context\n in sslogdensity at /home/grad/msl33/Dropbox/pprocess/statespace.jl:412\n
Run Code Online (Sandbox Code Playgroud)\n\n

但如果我直接执行函数内的代码,它就可以工作

\n\n
julia> (id,Tobs,\xce\xbcg,y\xe2\x82\x80,y\xe2\x82\x81,yg,\xce\xbe\xe2\x82\x80\xe2\x82\x90\xe1\xb5\xa3,\xce\xbe\xe2\x82\x80\xe1\xb5\xa3\xe1\xb5\xa3,\xce\xbe\xe2\x82\x81\xe2\x82\x90\xe1\xb5\xa3,\xce\xbe\xe2\x82\x81\xe1\xb5\xa3\xe1\xb5\xa3,\xce\xbe\xe2\x82\x80\xe2\x82\x90\xe2\x82\x90,\xce\xbe\xe2\x82\x81\xe2\x82\x90\xe2\x82\x90,,g,g\xe1\xb5\xa7)=params(trial);\n\njulia> if(g\xe1\xb5\xa7==1)\n               return sslogdensity(yg,g\xe1\xb5\xa7,\xce\xbcg,\xcf\x83\xc2\xb2,\xc5\x82,\xcf\x81\xc2\xb2)\n           else\n               return 0\n           end\n-322.1504448303596\n
Run Code Online (Sandbox Code Playgroud)\n\n

谁能为我提供这种行为的任何解释?

\n\n

编辑:\n为了完整性\n错误消息中的第 412 行对应于该行

\n\n
if(g\xe1\xb5\xa7==1)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
function params(trial::ABtrial)\n    return (trial.id,trial.Tobs,trial.\xce\xbcg,trial.y\xe2\x82\x80,trial.y\xe2\x82\x81,trial.yg,trial.\xce\xbe\xe2\x82\x80\xe2\x82\x90\xe1\xb5\xa3,trial.\xce\xbe\xe2\x82\x80\xe1\xb5\xa3\xe1\xb5\xa3,trial.\xce\xbe\xe2\x82\x81\xe2\x82\x90\xe1\xb5\xa3,trial.\xce\xbe\xe2\x82\x81\xe1\xb5\xa3\xe1\xb5\xa3,trial.\xce\xbe\xe2\x82\x80\xe2\x82\x90\xe2\x82\x90,trial.\xce\xbe\xe2\x82\x81\xe2\x82\x90\xe2\x82\x90,trial.,trial.g,trial.g\xe1\xb5\xa7)\nend\n
Run Code Online (Sandbox Code Playgroud)\n

Fre*_*gge -1

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