Julia 为什么我会得到MethodError:Float64类型的对象是不可调用的?

Julia 为什么我会得到MethodError:Float64类型的对象是不可调用的?,julia,Julia,我有这个功能: function prob(q, na, mask) q0 = round(Int, q.>0) m0 = round(Int, mask) return prod((q0 + (1-2q0).*pdet0(na)).^m0) end 其中,pdet0()是另一个函数,当我想调用该函数时,我看到一个MethodError:Float64类型的对象是不可调用的,显然,错误出现在函数的最后

我有这个功能:

function prob(q, na, mask)
            q0 = round(Int, q.>0)
            m0 = round(Int, mask)
            return prod((q0 + (1-2q0).*pdet0(na)).^m0)
        end

其中,
pdet0()
是另一个函数,当我想调用该函数时,我看到一个
MethodError:Float64类型的对象是不可调用的
,显然,错误出现在函数的最后一行,它与将变量放在括号表达式之前有关,但我确实看不到它,因为它看起来很好。

您需要提供运行函数和重现错误所需的所有信息。什么是
q
na
mask
?什么是pdet0?

您需要提供运行函数和再现错误所需的所有信息。什么是
q
na
mask
?什么是
pdet0

正如Kristofer所说,鉴于您的示例没有运行,很难说清楚,但罪魁祸首很可能是
pdet0(na)
,它被解释为“使用参数
na
调用函数
pdet0

极有可能,
pdet0
是代码中的一个
Float64
数字,会导致错误。重现错误的最低工作示例是:

julia> function1 = 1.0
1.0

julia> function1(5)
ERROR: MethodError: objects of type Float64 are not callable
Stacktrace:
 [1] top-level scope at REPL[2]:1

你需要想一想什么是
pdet0
,以及你为什么试图调用它。你是否有可能来自Matlab并试图索引到vector
pdet0
?这将是
pdet0[na]
在Julia中,如果
pdet0
是一个向量,而
na
是一个整数,那么它就会起作用。

正如Kristofer所说,很难说你的例子没有运行,但罪魁祸首很可能是
pdet0(na)
,它被解释为“用
na
参数调用函数
pdet0

极有可能,
pdet0
是代码中的
Float64
数字,从而导致错误。再现错误的最低工作示例为:

julia> function1 = 1.0
1.0

julia> function1(5)
ERROR: MethodError: objects of type Float64 are not callable
Stacktrace:
 [1] top-level scope at REPL[2]:1

您需要思考什么是
pdet0
,以及为什么要调用它。您是否碰巧来自Matlab并试图索引到vector
pdet0
?这将是Julia中的
pdet0[na]
,如果
pdet0
是一个向量和
na
和整数,这将起作用

我之所以没有发布整个代码,是因为它是一个包含多个文件的包,我在这里发布的函数基本上是一个光子探测概率的计算
q
是探测到的光子数,
na
到达的光子数
mask
是探测器数,所以它们都是数字,下面是整个文件在
Github
上的链接:我之所以没有发布整个代码,是因为它是一个包含多个文件的包,我在这里发布的函数基本上是一个光子探测概率的计算
q
是探测到的光子数,
na
到达的光子数
mask
是探测器数,所以它们都是数字,下面是整个文件在
Github
上的链接:你是对的,但问题是这是一个混淆,因为我有一个函数名为另一个变量的同名函数,我没有注意到,但是
pdet0()
函数是另一个文件中另一个函数的内部函数,现在我调用
prob()
我有
UndefVarError:pdet0未定义
prob()
在构造函数中。这可能是一个范围问题,不幸的是,如果你不能发布一个关于如何定义
pdet0
prob
以再现错误的最低工作示例,那么远程调试几乎是不可能的…你是对的,但问题是这是一个混乱,因为我有一个名为另一个变量同名的函数,我没有注意,但仍然,
pdet0()
函数是其他文件中另一个函数的内部函数,当我现在调用
prob()
时,我遇到了
UndefVarError:pdet0未定义
prob()
在构造函数中。这可能是一个范围问题,不幸的是,如果您不能发布一个关于如何定义
pdet0
prob
以再现错误的最低工作示例,那么远程调试几乎是不可能的。。。