我有一个持续的错误,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代码上的Julia REPL中似乎没有相同的错误。
我已经在主模块和文件中的单个Julia包中尝试了Using Base: *和import Base.*,但都没有用。对可能发生的事情有什么想法吗?
发布于 2021-06-17 02:47:39
如果你在后面的函数中或者在一个没有被采用的分支中意外地赋值给了*,就会出现这种情况。最容易发生这种情况的地方是在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发布于 2021-06-17 00:44:20
如果没有可重现的示例和完整的错误消息,就很难有所帮助。我能想到的唯一未定义*的上下文是在baremodule中
julia> *
* (generic function with 328 methods)
julia> module M1
*
end
Main.M1
julia> baremodule M2
*
end
ERROR: UndefVarError: * not defined
Stacktrace:
[1] top-level scope
@ REPL[2]:2https://stackoverflow.com/questions/68006034
复制相似问题