没有方法匹配write(:: IOStream,:: MyClass)

时间:2019-04-23 04:21:13

标签: julia

我正在使用julia v0.6代码。但是我的julia版本是v1.1。我不知道如何修改这段代码

roadway_HOLO = open(io->read_dxf(io, Roadway, dist_threshold_lane_connect=2.0), joinpath(@__DIR__, "../data/ngsim_HOLO.dxf"), "r")

convert_curves_feet_to_meters!(roadway_HOLO)

open(io->write(io, roadway_HOLO), joinpath(@__DIR__, "../data/ngsim_HOLO.txt"), "w")

该错误发生在代码的最后一行。请帮忙。

ERROR: LoadError: LoadError: MethodError: no method matching write(::IOStream, ::AutomotiveDrivingModels.Roadway)
Closest candidates are:
  write(::IO, ::Any) at io.jl:498
  write(::IO, ::Any, ::Any...) at io.jl:500
  write(::IOStream, ::UInt8) at iostream.jl:378
  ...
Stacktrace:

2 个答案:

答案 0 :(得分:1)

我相信您正在使用此AutomotiveDrivingModels.jlseems to be that必须将MIME("text/plain")传递给对write的调用,才能将Roadway对象写入文本文件。

open(io->write(io, MIME("text/plain"), roadway_HOLO), joinpath(@__DIR__, "../data/ngsim_HOLO.txt"), "w")
# or
open(io->write(io, MIME"text/plain"(), roadway_HOLO), joinpath(@__DIR__, "../data/ngsim_HOLO.txt"), "w")

请注意,您也可以将do语法用于第一个参数为Function的方法,例如open。上面的调用等同于下面的调用。

open(joinpath(@__DIR__, "../data/ngsim_HOLO.txt"), "w") do io
    write(io, MIME("text/plain"), roadway_HOLO)
end

请注意,methods(write)通常应显示write类型的Roadway方法,并且?write应显示此{{1} } 方法。如果将来碰巧遇到类似的错误,则可能需要尝试使用这些方法来找到正确的方法签名。

答案 1 :(得分:1)

使用Serialization将Julia对象存储在文件中:

考虑一些自定义数据结构和一些对象。

struct Some
    x::String
    y::Int
end

s = Some("test 123",12345)

可以使用以下命令序列化以上结构:

using Serialization
open("file.bin","w") do f
    serialize(f,s)
end

现在让我们测试反序列化:

julia>  open("file.bin") do f; println(deserialize(f)==s); end
true