将项目添加到字符串对数组中的方法错误
MethodError on adding items into Array of string pairs
我在对字符串对数组执行非常基本的操作时遇到 MethodError。
julia> arr = Array{Pair{string, string}}(undef, 1)
1-element Array{Pair{string,string},1}:
#undef
julia> p = "str1" => "str2"
"str1" => "str2"
julia> push!(arr,p)
ERROR: MethodError: First argument to `convert` must be a Type, got string
Stacktrace:
[1] convert(::Type{Pair{string,string}}, ::Pair{String,String}) at ./pair.jl:71
[2] push!(::Array{Pair{string,string},1}, ::Pair{String,String}) at ./array.jl:934
[3] top-level scope at REPL[103]:1
julia> arr[1] = p
ERROR: MethodError: First argument to `convert` must be a Type, got string
Stacktrace:
[1] convert(::Type{Pair{string,string}}, ::Pair{String,String}) at ./pair.jl:71
[2] setindex!(::Array{Pair{string,string},1}, ::Pair{String,String}, ::Int64) at ./array.jl:847
[3] top-level scope at REPL[104]:1
Int 对数组似乎没有这个问题。
julia> arr2 = Array{Pair{Int, Int}}(undef, 1)
1-element Array{Pair{Int64,Int64},1}:
0 => 0
julia> p2 = 1 => 2
1 => 2
julia> push!(arr2,p2)
2-element Array{Pair{Int64,Int64},1}:
0 => 0
1 => 2
julia> arr2[1] = p2
1 => 2
我是不是漏掉了什么?
应该是:
arr = Array{Pair{String, String}}(undef, 1)
在构造函数中使用参数类型后,似乎会检查参数类型的正确性,因此允许这种不正确的数据结构。
我在对字符串对数组执行非常基本的操作时遇到 MethodError。
julia> arr = Array{Pair{string, string}}(undef, 1)
1-element Array{Pair{string,string},1}:
#undef
julia> p = "str1" => "str2"
"str1" => "str2"
julia> push!(arr,p)
ERROR: MethodError: First argument to `convert` must be a Type, got string
Stacktrace:
[1] convert(::Type{Pair{string,string}}, ::Pair{String,String}) at ./pair.jl:71
[2] push!(::Array{Pair{string,string},1}, ::Pair{String,String}) at ./array.jl:934
[3] top-level scope at REPL[103]:1
julia> arr[1] = p
ERROR: MethodError: First argument to `convert` must be a Type, got string
Stacktrace:
[1] convert(::Type{Pair{string,string}}, ::Pair{String,String}) at ./pair.jl:71
[2] setindex!(::Array{Pair{string,string},1}, ::Pair{String,String}, ::Int64) at ./array.jl:847
[3] top-level scope at REPL[104]:1
Int 对数组似乎没有这个问题。
julia> arr2 = Array{Pair{Int, Int}}(undef, 1)
1-element Array{Pair{Int64,Int64},1}:
0 => 0
julia> p2 = 1 => 2
1 => 2
julia> push!(arr2,p2)
2-element Array{Pair{Int64,Int64},1}:
0 => 0
1 => 2
julia> arr2[1] = p2
1 => 2
我是不是漏掉了什么?
应该是:
arr = Array{Pair{String, String}}(undef, 1)
在构造函数中使用参数类型后,似乎会检查参数类型的正确性,因此允许这种不正确的数据结构。