📐
Julia の Array の struct をあたかもArrayのように使う方法
課題
なんかの
struct A{T}
a::T
end
があって、 複数の A を扱いたいときに
- struct のリストを使う
- リストを内包した別のstructを作る
かの選択を迫られる。
どちらを使うかはまぁ好みとして(パフォーマンスに影響出るからどっちが優位かすでに決まっているかもしれないけど)
問題は、後者の場合
struct B
list :: Array{A}
end
something = B(hogehoge)
としてlistにアクセスするときにいちいち
something.list[3:end]
などとアクセスしなければならなくて面倒
解決策
対象のstructに対して下記のように getindex 関数を定義してやれば良い
getindex(L::B, inds...) = getindex(L.list, inds...)
これでコンストラクタに直接スライス記法でアクセスできる something[2:end]
最後に&参考
リスト + 追加情報をセットにしたstructを作るときにアクセスが煩雑だと思いながら公式ソース[1]眺めてたら、意外とかんたん書けることに気づいてスッキリしたので記す
Discussion
以下ご存じでしょうか?
全く知りませんでした。情報ありがとうございます!!