【问题标题】:Julia error: ERROR: LoadError: TypeError: in Vararg, in count, expected Int64, got Type{Float64}Julia 错误:错误:LoadError:TypeError:在 Vararg 中,计数中,预期 Int64,得到 Type{Float64}
【发布时间】:2021-05-26 20:20:41
【问题描述】:

我在一个可变结构中声明了一些向量。然后我在其他方法中创建和使用它们,但我不断收到以下错误:

ERROR: LoadError: TypeError: in Vararg, in count, expected Int64, got Type{Float64}
Stacktrace:
 [1] top-level scope at C:\Users\taylo\OneDrive\SummerResearch2021\RK Programs\Julia\RK_JuliaOriginal2.jl:4
 [2] include(::Function, ::Module, ::String) at .\Base.jl:380
 [3] include(::Module, ::String) at .\Base.jl:368
 [4] exec_options(::Base.JLOptions) at .\client.jl:296
 [5] _start() at .\client.jl:506
in expression starting at C:\Users\taylo\OneDrive\SummerResearch2021\RK Programs\Julia\RK_JuliaOriginal2.jl:4

我确实看到了一些其他类似的东西,但解决方案要么不能直接应用于此,要么没有帮助。我对 Julia 还是很陌生。 下面是所有相关代码(它缺少很多变量声明和计算,但那些东西与此无关。谢谢!

mutable struct JuliaNeuron
    RK_dm::NTuple{Float64}
    RK_dh::NTuple{Float64}
    RK_dn::NTuple{Float64}
    RK_dVm::NTuple{Float64}
end

function RK(neuron::JuliaNeuron, RKindex::Int64, RK_dm, RK_dh, RK_dn, RK_dVm)
    RK_dm[RKindex] = aM * (1 - m) - bM * m
    RK_dh[RKindex] = aH * (1 - h) - bH * h
    RK_dn[RKindex] = aN * (1 - n) - bN * n
end

function calculateNextTimeStep(stimulus::Float64, neuron::JuliaNeuron, RK_dm, RK_dh, RK_dn, RK_dVm)
    # k1 Runge-Kutta step
    RK(neuron, 0, stimulus, neuron.m, neuron.h, neuron.n, neuron.v, RK_dm, RK_dh, RK_dn, RK_dVm)
end

function simulate()

    RK_dm = (0.0,0.0,0.0,0.0)
    RK_dh = (0.0,0.0,0.0,0.0)
    RK_dn = (0.0,0.0,0.0,0.0)
    RK_dVm = (0.0,0.0,0.0,0.0)

    # create a neuron
    neuron = JuliaNeuron(RK_dm, RK_dh, RK_dn, RK_dVm)

    for i = 1:N
        push!(t, (i*dt))
        push!(Vm, calculateNextTimeStep(stimAmplitude, neuron, RK_dm, RK_dh, RK_dn, RK_dVm))
    end
end

【问题讨论】:

  • 对于您的第一个问题,您可以将结构定义为mutable struct JuliaNeuron{T<:Real} 并将每个Float64 替换为T。这里不能运行的另一件事是字段mhnv 未定义。您想用RK_dm 等替换它们(反之亦然)。如果它仍然不起作用,请修复并编辑您的问题。 :-)

标签: arrays error-handling compiler-errors julia


【解决方案1】:

NTuple 类型需要元素的数量,因此您很可能想要编写:

mutable struct JuliaNeuron2{N}
    RK_dm::NTuple{N,Float64}
    RK_dh::NTuple{N,Float64}
    RK_dn::NTuple{N,Float64}
    RK_dVm::NTuple{N,Float64}
end

这个数据结构现在可以通过以下方式使用:

julia> JuliaNeuron2{2}((1,2),(3,4),(5,6),(7,8))
JuliaNeuron2{2}((1.0, 2.0), (3.0, 4.0), (5.0, 6.0), (7.0, 8.0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-14
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多