0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

julia のmethod dispatch の動きの確認

Last updated at Posted at 2019-11-23

実行環境 julia1.2, MacOS10.15

juliaのmethod dispatchで、どの型とも一致しなかった場合の処理を、型Anyで書けばうまくいくのかどうか確認した。(マニュアル読めばわかるだろうけど、さがすのが面倒)
とりあえず、3つ型を定義する。

struct A
 x::String
end

struct B
 y::Number
end

struct C
 z::Symbol
end

methodの定義をこうする。
引数がAでもBでもないとき、Anyの定義だけが使われれば吉。
classの継承だと、親のmethodが呼ばれたりするので、それに似た振る舞いだと、AやBのときもAnyの定義が使われてしまわないことを確認したい。

f(x::A) = "with A"
f(x::Any) = "with others"
f(x::B) = "with B"

Bの定義を最後にもってきたのは、定義の順番が関係しないか気になったので。

最後に、期待値を@testで書くとこんな感じ。
わたしの常識では、こうなっているはず。

using Test

@test f(A("i am A")) == "with A"
@test f(C(:others)) == "with others"
@test f(124) == "with others"
@test f(B(123)) == "with B"

実行すると、こうなったのでめでたし。

julia> include("methods.jl")
Test Passed

マニュアルさがすより面倒だったかもしれないが、動かしたほうが記憶できる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?