まつもと ゆきひろです

In message "Re: [ruby-dev:26463] String#each_byte and String#each_char"
    on Thu, 7 Jul 2005 12:18:59 +0900, "NARUSE, Yui" <naruse / airemix.com> writes:

|HEADに対して、
|String#each_byte #=> array
|と、組み込みの
|String#each_char #=> array
|String#each_char{|char| block } #=> str
|の提案です。
|
|まず、String#each_byte。
|現在、stringのバイト単位の配列が欲しい場合は、
|string.unpack('C*')
|などとしますが、unpackを使うのは直感的ではありません。
|
|過去に、each_*がブロックなしで動作する例が他に無い[ruby-list:37048]
|とされていますが、わたし自身はscanからの連想で、
|何度かeach_byteをブロック無しで使い、その度に悲しい思いをしているので、
|ブロック無しだと配列を返すようになるとうれしいです。

でも、やっぱり「eachは違う」と思います。そういうメソッドが欲
しいという要求は分かります。良い名前があれば今日にもHEADに追
加します。explodeなんて名前も聞いたことがありますが...。

  split_bytes
  explode_bytes
  unpack_bytes

どうだろう?

|次にString#each_char。
|過去にeach_charについては議論されているようですが、
|eachのaliasを置き換えることは別とした場合、
|each_charを組み込みで導入すること自体への問題点は、
|メソッド名だけのように見えます。
|
|matz wrote in [ruby-dev:23995]
|>  (2) M17N的な"character"ってのはコードポイント(に対応するバ
|>      イト列)ですから、たとえば合成文字の場合一部分だけを表現
|>      するものもcharacterになってしまいます。こういうものを堂々
|>      とcharと呼んではいけないような気もします。なんか言い名
|>      前ないかな。
|
|http://www.itscj.ipsj.or.jp/tutorials/tu48.htmlにて、
|「文字構成要素でも符号位置を持っていれば,
| それをcharacterと呼ぶことがSC 2の定義であり,
| これらを合成した結果の"いわゆる文字"はcombining sequenceと
| 定義されている.」とされていることから、
|このeach_charは挙動にふさわしい名前だと考えます。
|よって、改めてeach_charの導入を提案します。

ふむ、ではeach_charは導入しましょう。ただし、ブロックなしで
配列をとる機能はeach_byte同様別の名前を必要とするとします。

|#Ruby M17Nって最近どうなってるのかな〜と思いつつ

えーと、「時間をください」。まずは鬼車ver.3とm17nの統合の不
完全な部分をなんとかしてm17nベースの鬼車を作ってからHEADに、
と思ってはいるのですが、はや数ヵ月ほっぽってます。

                                まつもと ゆきひろ /:|)