きりかノート 3冊め

おあそびプログラミング

RubyCocoa 今日のコミット 2014-06-06 `?a`リテラルの修正

ruby-2.x対応に向けて、2月にメモった課題を調べてる。

今日はテスト流すと何ヶ所かで"ArgumentError: invalid value for Integer()"って例外がでて失敗するとこがあるのについて。エラーが出てるのはrb_Integer(str)で文字を整数値に変換しようとしているところで、これは動作としては正しい。

`?a`というリテラルの意味がruby-1.8と1.9以降で異なるのだ。 ruby-1.8では(1.8のリファレンス)

?a
文字 a のコード (97)

と数値をあらわすのに対し、1.9以降(2.1のリファレンス)では

?a
文字 a を表す String

と、文字になっている。

たとえばテストtc_types.rbでは次のようなテストがあるが、

     def test_char_conversion
       v = OSX::NSNumber.numberWithChar(?v)
       assert_equal(?v, v.charValue)
     end

これは`?v`の表す意味が1.8では118という数値なのに対し、2.1では"v"という文字になっているのだ。そりゃ失敗するよな。

ということで数字で書くように直した(r2524)