バージョン管理された人

subversionで管理されてます

CrystalのIndexableの実装

本家のAPIドキュメントに Indexable(T) の詳しい実装方法がなくて苦戦した。

crystal-lang.org

最初は #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