今日はuser agent parserのruby版をcrystalに移植していた。 github.com crystalはv0.18.7を使っているのだけど書いてて気づいたことがあるのでメモ not nilの推論はインスタンス変数には効かない crystalは型に厳しいです。変数fooがStringあるいはNil型であるときはどちらの型にも存在するメソッドしか呼べません。 Stringにしかないメソッドを呼ぶときには条件分岐でnot nilであることを保証させます。 # foo : String?とする if foo.nil? # ここではfooはNil型 else # ここではfooはnot nilなのでString型 end ローカル変数ならこれでおkですがインスタンス変数はこれだとダメです。 class Klass @foo : String? def size if @foo.n