Я перехожу с Python и довольно новичок в Джулии, но этот оказывается довольно сложным для понимания. Я надеюсь позже скомпилировать пакеты через 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 в качестве типа данных?

2
Will 13 Фев 2021 в 05:18

1 ответ

Лучший ответ

Cfloat - это Float32 2.3 - это Float64. Обратите внимание, что вам, вероятно, не следует часто использовать Cfloat (или другие типы, относящиеся к типу C +). Это псевдонимы для взаимодействия с C.

2
Oscar Smith 13 Фев 2021 в 04:46