首页 > 解决方案 > UndefVarError: * 未定义

问题描述

我遇到一个持续错误,当我在正在处理的包中使用乘法时,Julia 告诉我乘法运算符未定义。我没有在包中的任何地方重新定义或扩展基本乘法运算符,并且在某些地方可以识别乘法,而在其他地方则不能。例如,在下面的代码中

    Λ = h.metric.Λ # Type Int64
    kSize = 2*Λ+1
    for i = 1:n_steps
        # Tempering
        r = temper(lf, r, (i=i, is_half=true), n_steps)
        # Take a half leapfrog step for momentum variable
        r = r - map(gradi -> ϵ / 2 .* gradi, grad)

第 2 行的乘法给了我UndefVarError: * not defined最后一行的乘法编译和执行没有错误。

包外和 Visual Studio Code 上的 Julia REPL 中的乘法似乎没有相同的错误。

我已经尝试过Using Base: *,并且import Base.*在文件中的主模块和单个 Julia 包中都无济于事。关于可能发生的事情有什么想法吗?

标签: julia

解决方案


如果您稍后在函数中或在没有被占用的分支中不小心分配给它,则会出现这种情况。*可能发生这种情况的一个简单的地方是在一个if打算询问是否a*b == c但错误地使用=代替的表达式中==

julia> function test(a, b, c)
           d = a*b
           if (a*b = c)
               println("got $d")
           end
       end
test (generic function with 1 method)

julia> test(2,3,6)
ERROR: UndefVarError: * not defined
Stacktrace:
 [1] test(a::Int64, b::Int64, c::Int64)
   @ Main ./REPL[4]:2
 [2] top-level scope
   @ REPL[5]:1

推荐阅读