[前][次][番号順一覧][スレッド一覧]

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...    ]