Crystalでnot nilなgetterを定義する
環境
$ crystal version Crystal 0.15.0 [0f62400] (Fri Apr 1 16:59:50 UTC 2016) $ crenv --version crenv 1.0.0-7-g578eb0a
問題点
適当に getter や property を生やしてるとNot Nilであることをコンパイラが検知できなくて困る
対応策
楽に書きたい派なので getter! を好んで使っている
確認
$ crystal run src/tips/nillable_property.cr
Error in ./src/tips/nillable_property.cr:10: undefined method 'split' for Nil (compile-time type is String?)
puts h.fuga.split("")
^~~~~
================================================================================
Nil trace:
macro getter (in /Users/username/.anyenv/envs/crenv/versions/0.15.0/src/object.cr:221):4
def fuga
^~~~
macro getter (in /Users/username/.anyenv/envs/crenv/versions/0.15.0/src/object.cr:221):5
@fuga
^~~~~
================================================================================
Error: instance variable '@fuga' of Hoge was not initialized in all of the 'initialize' methods, rendering it nilable
Specifically in this one:
./src/tips/nillable_property.cr:4
def initialize
^~~~~~~~~~
$ crystal run src/tips/not_nil_property.cr
["p", "i", "y", "o"]
最近ずっとCrystal書いてるので思い出しながら適当にtips集を書いておこうかと思いました。
その第一弾です。続くといいな。