Построение массива с плавающей запятой в julia

#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 , поскольку это значение по умолчанию.