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と数値をあらわすのに対し、1.9以降(2.1のリファレンス)では
文字 a のコード (97)
?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)。