blog.bouzuya.net

2013-11-08 Ruby の alias の落とし穴

Ruby の alias の落とし穴。落とし穴なんてのは普通落ちないもので、他人が落ちているのを見て笑うためにあると思っているし、事実そうである。

前置きはともかく、icalendar/icalendar にプルリクエスト #44をした。もうマージされているようなので、そのうち RubyGems にもリリースされるだろう。くだらないバグだったのだけれど、どうなっているの一瞬分からなかったのでメモ。

バグはふたつある。

ひとつめは attr_accessor と alias のからみで分かりづらくなっている例。

A.a も A.b も nil を返す。 :x を返しそうなものだけれど、b は a の alias で @a を読むので、@b に何を設定しても無駄だ。正しくはこう。@a に代入するだけ。

もうひとつは、alias の設定である。attr_accessor :a の場合、alias :b :a しても :b= は定義されない。忘れず alias :b= :a= する必要がある。

普通そんなにハマらない気はするけど、たまにあるんだろうな。attribute に対して alias を設定する場合は注意した方が良いかもしれない。

15 min.