jupyter上でのModuleの使い方

一言で言うと

moduleの中でstructを定義しておけば、structに変更を加えてもjupyterのカーネルを再起動する手間が省けるという話です。

本題

juliaでstructを定義し、後から変更を加えたい場合、カーネルを再起動しなければならない。例えば、

struct Hoge
    x::Int
end
h = Hoge(3)
h.x # 3

これに後からyというものをstructのフィールドに加えようとし、セルを実行してみる。すると、カーネルを再起動しなければいけなく面倒である。

struct Hoge
    x::Int
    y::Int
end

# エラーが出る

ここで、以下のようにmodule化しておくと、sturctに変更を加えてもエラーが出ることはない。

module My

struct Hoge
    x::Int
end

end

using .My
Hoge = My.Hoge
h = Hoge(3)
h.x

変更を加えてみるとエラー自体は出ないことがわかる。

module My

struct Hoge
    x::Int
    y::Int
end

end

using .My
Hoge = My.Hoge
h = Hoge(3,4)
h.x
h.y

structを作り直すごとにMyモジュールを使って、Hogeを書き直している。今いるmoduleは、メインっていうモジュールにいて、MyモジュールにいるHogeをメインに持ってきている。この場合、エラーが出ることはない。

メインモジュールにいるstructを書き直すと、カーネル再起動しないといけない。

广告
将在 10 秒后关闭
bannerAds