Crystalでも block_given?
を使いたいという意見があるが、なかなか実現するのは難しいようである。
しかし、上のissueに書いてあるようにオーバーロードを使えば、block_given?
でやりたい内容は実現できる場合がある。
def initialize(a)
@a = a
if block_given?
yield a
end
end
みたいなコードは
def initialize(@a)
end
def initialize(@a)
yield @a
end
みたいな感じで書けばいいようだ。おもしろいのは、特にdefの宣言の行には変化がなくても、yeildがあるかなしかだけでCrystalがブロックの有無を判定してコンパイルしてくれるっぽいところである。
この記事は以上です。