ruby-reference-manual:3017
From: "tomonacci (Tomo Kazahaya)" <tomonacci@g...>
Date: Sat, 24 Mar 2012 01:13:03 +0900
Subject: [ruby-reference-manual:3017] [るりまプロジェクト - Bug #6196][Open] Integer#chrにおける省略可能な引数の抜けとそれに伴う説明の誤り
Issue #6196 has been reported by tomonacci (Tomo Kazahaya). ---------------------------------------- Bug #6196: Integer#chrにおける省略可能な引数の抜けとそれに伴う説明の誤り https://bugs.ruby-lang.org/issues/6196 Author: tomonacci (Tomo Kazahaya) Status: Open Priority: Normal Assignee: Category: doc Target version: reporter: ruby_version: 1.9.2, 1.9.3 1.9.2と1.9.3のriを見ると = Integer#chr (from ruby site) ------------------------------------------------------------------------------ int.chr([encoding]) -> string ------------------------------------------------------------------------------ Returns a string containing the character represented by the receiver's value according to encoding. 65.chr #=> "A" 230.chr #=> "\346" 255.chr(Encoding::UTF_8) #=> "\303\277" とあり、Integer#chrはエンコーディングを引数に取りますが、るりまでは取らないことになっています。 エンコーディングを引数に取る時、chrが返す文字列は必ずしも1バイトとは限らず、RangeErrorが起こる範囲も変化します。 以上を踏まえた改善案: (先に補足: 引数無しの時の説明の根拠はnumeric.c:2229辺りで定義されているint_chrの挙動です。1.9.1が手元でコンパイルできなかったのでバージョン分けは間違っているかもしれません。) --- Integer.utf8.old 2012-03-23 23:13:17.434147655 +0900 +++ Integer.utf8 2012-03-24 01:07:59.328603381 +0900 @@ -31,24 +31,39 @@ == Instance Methods +#@until 1.9.1 --- chr -> String + 文字コードに対応する 1 バイトの文字列を返します。 例えば65.chr は "A" を返します。 -#@until 1.9.1 逆に文字列から文字コードを得るには "A"[0] とします -#@else -逆に1文字の文字列から文字コードを得るには "A".ord とします。 -#@end @return 1バイト文字列 - @raise RangeError self が 0 から 255 の範囲外の場合に発生します。 - -#@until 1.9.1 @see [[m:String#[] ]] #@else +--- chr -> String +--- chr(encoding) -> String + +与えられたエンコーディング encoding において self を文字コードと見た時、それに対応する一文字からなる文字列を返します。 +引数無しで呼ばれた場合は self を US-ASCII、ASCII-8BIT、デフォルト内部エンコーディングの順で優先的に解釈します。 + + p 65.chr # => "A" + p 0x79.chr.encoding # => #<Encoding:US_ASCII> + p 0x80.chr.encoding # => #<Encoding:ASCII_8BIT> + p 12354.chr Encoding::UTF_8 # => "あ" + p 12354.chr Encoding::EUC_JP + # => RangeError: invalid codepoint 0x3042 in EUC-JP + p 12354.chr Encoding::ASCII_8BIT + # => RangeError: 12354 out of char range + p (2**32).chr + # => RangeError: bignum out of char range + +@param encoding エンコーディングを表すオブジェクト。Encoding::UTF_8、'shift_jis' など。 +@return 一文字からなる文字列 +@raise RangeError self を与えられたエンコーディングで正しく解釈できない場合に発生します。 @see [[m:String#ord]] #@end -- http://bugs.ruby-lang.org/ -- ML: ruby-reference-manual@m... Info: http://QuickML.com/
-> 3017 2012-03-23 17:13 [tomonacci@g... ] [るりまプロジェクト - Bug #6196][Open] Integer#chrにおける省略可能な引数の抜けとそれに伴う説明の誤り 3018 2012-03-25 05:21 ┗[kouyataifu4@g... ]