附加!当自定义类型混合时,失败并显示“没有方法匹配长度”

Abh*_*kKr 3 julia

我刚刚完成了 Julia 的最低限度基础知识,为了更好地理解结构,我尝试解决一些简单的问题。

如果我有一个自定义结构 say ,则创建一个sayHttpRequest数组。HttpRequest ArrayssampleArr

HttpRequest Array我的要求是动态更新sampleArr[index].

在尝试时append!出现以下错误

ERROR: LoadError: MethodError: no method matching length(::HttpRequest)

以下代码可以用作我想要做的事情的示例

#!/usr/bin/env julia

struct HttpRequest
  httpMethod
  httpHost
  httpBlah
end

reqA = HttpRequest("GET", "1.1.1.1", "yada")
reqB = HttpRequest("PUT", "1.1.1.1", "blah")
reqC = HttpRequest("GET", "2.3.2.3", "boka")
reqD = HttpRequest("POST", "8.1.8.1", "juka")
reqE = HttpRequest("PUT", "4.4.4.4", "kula")

sampleArrLen = 10
sampleArr = Array{Array, 1}(undef,sampleArrLen)

sampleArr[5] = [reqA]
append!(sampleArr[5], reqB)
Run Code Online (Sandbox Code Playgroud)

Bog*_*ski 5

您必须使用push!而不是append!,如下所示:

julia> push!(sampleArr[5], reqB)
2-element Array{HttpRequest,1}:
 HttpRequest("GET", "1.1.1.1", "yada")
 HttpRequest("PUT", "1.1.1.1", "blah")

julia> sampleArr
10-element Array{Array,1}:
 #undef
 #undef
 #undef
 #undef
    HttpRequest[HttpRequest("GET", "1.1.1.1", "yada"), HttpRequest("PUT", "1.1.1.1", "blah")]
 #undef
 #undef
 #undef
 #undef
 #undef
Run Code Online (Sandbox Code Playgroud)

push!和之间的区别append!在于,push!将单个元素推送到集合中,并将append!其他集合的所有元素附加到集合的末尾。因此,以下内容将起作用append!(sampleArr[5], [reqB])并给出与 相同的结果push!(sampleArr[5], reqB)。这里的区别在于您包装reqB在一个数组中,因此现在您将单个元素集合附加到sampleArr.