#julia #julia-plots
#julia #julia-графики
Вопрос:
У меня есть следующий код
using Plots
function test()::nothing
A::Array{Float64,1} = rand(Float64,100)
plot(A)
end
Который я запускаю в julia следующим образом
julia> include("main.jl")
test (generic function with 1 method)
julia> test()
ERROR: MethodError: First argument to `convert` must be a Type, got nothing
Stacktrace:
[1] test() at /path/to/main.jl:85
[2] top-level scope at REPL[2]:1
Почему я получаю сообщение об ошибке First argument to convert must be a Type, got nothing
?
Комментарии:
1. Ну, вы должны написать
Nothing
. Или, что еще лучше, вообще ничего, поскольку нет необходимости аннотировать типы, если это не требуется.
Ответ №1:
Ну, эта проблема связана с тем фактом, что вы использовали nothing
в аннотации, но правильный тип — Nothing
(обратите внимание на заглавную N
букву). nothing
является объектом, Nothing
является типом этого объекта.
Итак, вы должны использовать что-то вроде
function test()::Nothing
A::Array{Float64,1} = rand(Float64, 100)
display(plot(A))
nothing
end
Обратите внимание, что мне пришлось добавить nothing
в качестве возвращаемого значения и явно display
показать фактический график.
Но, честно говоря, основная проблема заключается не в Nothing
этом, а в чрезмерной специализации. Аннотации типов в функциях не ускоряют вычисления, их следует использовать только тогда, когда они действительно необходимы, например, при многократной отправке.
Идиоматический код выглядит следующим образом
function test()
A = rand(100)
plot(A)
end
Обратите внимание, что я удалил все дополнительные аннотации и ненужные Float64
in rand
, поскольку это значение по умолчанию.