Как напечатать экземпляр struct в консоли, не отображая всю его трассировку стека в Julia? - PullRequest
0 голосов
/ 09 марта 2019

Есть два Джулиевых файла:

file1.jl

struct MyStruct
    attribute :: String
end

file2.jl

module myModule
    include("file1.jl")
    println(MyStruct("a"))
end

Когда я выполняю file2.jl , он должен напечатать экземпляр MyStruct

user@user-MS-7823:~$ julia cpsld/file2.jl
Main.myModule.MyStruct("a")
user@user-MS-7823:~$ 

Я ожидал, что он напечатает только имя структуры (так что MyStruct ("a") ), однако я был удивлен, поскольку он также печатает все имена модулей, что немного раздражает ... Есть ли способ не печатать модули вместе с именем структуры?

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Спасибо @ Bogumił Kamiński за ваше решение.Проблема в том, что это работает только для печати (хорошо, я знаю, поэтому я попросил LOL).

Представьте, у меня есть три файла.

file1.jl

module myFirstModule
    struct MyStruct
        attribute :: String
    end
end

file2.jl

module mySecondModule
    include("file1.jl")
    include("file3.jl")
    myThirdModule.hello(myFirstModule.MyStruct("a"))
end

file3.jl

module myThirdModule
    include("file1.jl")
    function hello(arg)
        println("argument : ", arg)
        println("isa test : ", isa(arg, myFirstModule.MyStruct))
    end
end

Ну вот, второймодуль создает экземпляр myStruct и вызывает функцию «hello» из третьего модуля с этим экземпляром в качестве аргумента.

Это вывод консоли:

argument : Main.mySecondModule.myFirstModule.MyStruct("a")
isa test : false

Как вы можете видетьрезультат теста isa равен false .

Это означает, что тип arg не myFirstModule.MyStruct , нокогда я печатаю arg , как вы можете видеть, я получаю это: Main.mySecondModule.myFirstModule.MyStruct("a")

Означает ли это, что myFirstModule.MyStruct ! = Main.mySecondModule.myFirstModule.MyStruct ?

0 голосов
/ 09 марта 2019

Вы можете использовать IOContext так:

module myModule
    struct MyStruct
        attribute :: String
    end
    println(IOContext(stdout, :module=>myModule), MyStruct("a"))
end

(тот факт, что у вас есть определения, разделенные на два файла, здесь не имеет значения)

...