LoginSignup
0
0

More than 1 year has passed since last update.

Crystalでblock_given?を使いたい場合、オーバーロードすればいい

Last updated at Posted at 2022-01-13

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がブロックの有無を判定してコンパイルしてくれるっぽいところである。

この記事は以上です。

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