1

我有以下代码

using Plots

function test()::nothing
  A::Array{Float64,1} = rand(Float64,100)
  plot(A)
end

我像这样在朱莉娅跑

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

4

1 回答 1

4

好吧,这个问题与您在注释中使用的事实有关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,因为它是默认值。

于 2020-12-14T11:37:50.397 回答