[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24029] Re: String#each -> String#each_char

From: Shugo Maeda <shugo@...>
Date: 2004-08-06 11:27:23 UTC
List: ruby-dev #24029
前田です。

Minero Aoki wrote:
> つまり、わたしの懸念の核心は String#each 自体の変化にあるのでは
> なく、芋蔓式に他の個所のユーザビリティが下がることです。逆に言えば、
> その他の部分のユーザビリティの低下を押さえられる方策が同時に取ら
> れるのであれば必ずしも String#each の仕様が変わるのには反対では
> ありません。しかしそれをすべて「関係ない」として無視されてしまう
> のでは、こちらとしては妥協するわけにいきません。

なるほど。

> (1) 文字列 → 行配列 強化策
> 
> * 文字列を行配列にするメソッド String#lines を新設する (名前はHaskellから)
> 
> * Enumerator を組み込みにする
> * to_enum を短くする。例えば #by とか
> * map_by, collect_by, select_by... を全部用意してしまう

Enumeratorを組込みにするのなら、String#lines(あるいは他の名前のメソッド)
でEnumeratorを返すという手もありますね。

> (2) 配列 → IO 強化策
> 
> * 配列からワンステップで StringIO を作れるようにする。
>   (いいメソッド名が思いつかない)

StringIO.newでto_sを使うようにすればワンステップになりますけど、それが
いいかどうかは微妙ですね。

それはそれとして、Stringでもmapやselectを使うとArrayになっちゃうので、
やっぱり同じ問題がありませんか?

Akinori MUSHA wrote:
>  それは利用側からの視点ですが、実装側で工夫する手もあります。
> これは一つのアイデアであって提案というわけではないのですが、
> たとえば、「each_* メソッドは、ブロックなしで呼ばれた場合に
> Enumerable なオブジェクトを返すように実装する」という解もあり
> 得ます。すると、利用側は
>
> 	ObjectSpace.each_object.select { |obj| ... }
>
> のように書けるようになるわけです。

いっそのことMethodオブジェクトにeachをcallのaliasとして用意して、
Enumerableをincludeしてしまうというのは強引すぎるでしょうか。

ObjectSpace.method(:each_object).select { |obj| ... }

これだとあまり短くなりませんが、以前提案したようにobj!fooで
obj.method(:foo)と同じ意味になるような構文糖を用意すれば、

ObjectSpace!each_object.select { |obj| ... }

と書けます。
# スペースの有無でobj(!foo)と区別できるかな?

ついでに、

for obj in ObjectSpace!each_object
  ...
end

と書ける副作用付き:-)

-- 
前田 修吾

In This Thread