为什么向Julia函数添加类型会导致MethodError?

为什么向Julia函数添加类型会导致MethodError?,julia,Julia,我是从Python迁移过来的,对Julia来说是个新手,但事实证明这一点很难理解。我希望以后通过PackageCompiler编译包,以便在其他语言中使用,因此我需要能够导出C可调用方法。如果我定义以下代码: module MyModule export testmethod1 export testmethod2 function testmethod1(x::Cfloat, y::Cfloat)::Cfloat return x^y*4 end function testmet

我是从Python迁移过来的,对Julia来说是个新手,但事实证明这一点很难理解。我希望以后通过PackageCompiler编译包,以便在其他语言中使用,因此我需要能够导出C可调用方法。如果我定义以下代码:

module MyModule

export testmethod1
export testmethod2

function testmethod1(x::Cfloat, y::Cfloat)::Cfloat
    return x^y*4
end

function testmethod2(x, y)
    return x^y*4
end

end
调用
println(MyModule.testmethod2(2.3,3.2))
,我得到
57.489570831681995

然而,当我调用
println(MyModule.testmethod1(2.3,3.2))
时,我得到

ERROR: LoadError: MethodError: no method matching testmethod1(::Float64, ::Float64)

但是当我输入检查这些变量时,比如说,
println(typeof(2.3))
,我得到了
Float64
!当我指定Cfloat作为数据类型时,为什么Julia无法匹配我给函数的输入?

Cfloat
是一个
Float32
2.3
是一个
Float64
。请注意,您可能不应该经常使用
Cfloat
(或
C
+类型的其他类型)。这些都是C interop的别名。

Cfloat
是一个
Float32
2.3
是一个
Float64
。我觉得自己很笨。匹配的是我试图调用的函数类型,而不是现有的函数类型。你会把这个作为一个答案,还是更符合SO礼仪的说法,把它作为一个评论?