нет подходящего метода write (:: IOStream, :: MyClass) - PullRequest
0 голосов
/ 23 апреля 2019

Я использую код julia v0.6. Но моя версия Джулии 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 ]

1 голос
/ 23 апреля 2019

Используйте 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
1 голос
/ 23 апреля 2019

Я полагаю, что вы используете этот AutomotiveDrivingModels.jl . кажется, что вам нужно передать 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 должен показывать строку документации для этого write метода. Если вы столкнетесь с подобной ошибкой в ​​будущем, вы можете попробовать их, чтобы найти правильную сигнатуру метода.

...