From: Akinori MUSHA Date: 2004-08-06T13:30:37+09:00 Subject: [ruby-dev:24027] Re: String#each -> String#each_char At Fri, 6 Aug 2004 05:57:18 +0900, aamine wrote: > * String#to_a がいつまで使えるか信用ならない。 > > String#each は文字単位なのが「自然」だと言うなら、#to_a > は文字配列を返すのが「自然」だろうと予想せざるを得ない。 > 従って String#to_a は信用できない。  to_a は Enumerable のメソッドなので each とは連動しますよね。 (そういう意味でなかったら失礼) > また具体的な補強案としては以下を提案します。 > > (1) 文字列 → 行配列 強化策 > > * 文字列を行配列にするメソッド String#lines を新設する (名前はHaskellから)  これは僕も考えました。  今の Ruby では、 String#[] はバイト単位、 String#each は行単位、 引数なしの String#split はホワイトスペース区切りの語単位、のように 利便性におもねった構成になっています。それが手軽かつ便利だという 信念がある(あった)のだと思いますが、メソッドに明確な名前を付けても Enumerator のようなものを利用する際に便利さも損なわれない、という のが理想ですよね。 > * Enumerator を組み込みにする  これは僕も当初から「組み込みでないとうれしさが半減する」と主張 しているので賛成です。 > * to_enum を短くする。例えば #by とか  それは利用側からの視点ですが、実装側で工夫する手もあります。 これは一つのアイデアであって提案というわけではないのですが、 たとえば、「each_* メソッドは、ブロックなしで呼ばれた場合に Enumerable なオブジェクトを返すように実装する」という解もあり 得ます。すると、利用側は ObjectSpace.each_object.select { |obj| ... } のように書けるようになるわけです。  Enumerable なオブジェクトを簡単に生成できる API を(C レベル および Ruby レベルで)用意して支援してやれば、実装も容易になる でしょう。  ほかにも案があればいろいろ聞きたいです。 -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "It seems to me as we make our own few circles 'round the sun We get it backwards and our seven years go by like one"