CrystalのIndexableの実装
本家のAPIドキュメントに Indexable(T)
の詳しい実装方法がなくて苦戦した。
最初は #unsafe_fetch
だけを実装すればよいのかと思ったが、どうも、#unsafe_fetch
を実装しただけだとスタックオーバーフローを起こしてプログラムが死ぬ。
不思議に思ってドキュメントを見直したところ、単純に#unsafe_fetch
と #size
の2つのメソッドを実装する必要があった(ドキュメント内でabstraft def
を検索すればよかった)。
他の Hogeable
系は 「#foo
メソッドを実装してね」とかちゃんと書いてあるのに、これだけ書いてない...
以下、いらないかもだけど、実装例
class Klass(T) include Indexable(T) def initialize(n : Int) @n = n @buffer = Pointer(T).malloc(n) end def size @n end def unsafe_fetch(index : Int) @buffer[index] end end