From: kumaryu Date: 2002-02-12T22:58:14+09:00 Subject: [ruby-list:33861] Re: xxとして出し入れするメソッドの名前は? はじめまして、kumaryuと申します。 > そこで、このクラスの中身を Array として出し入れしたり、Hash として出し > 入れしたり、また、String(改行つきの文字列)として出し入れしたりするメソッ > ドが考えられるのですが、それらのメソッドの名前として《Ruby らしい》名前 > というのはどのようなものでしょうか?。 確かにVCLのStringsにはそんな機能がありますね。 しかし、Stringsの本来の機能から言えばそのような機能があることが不自然である ように思います。 私はVCLのStringsのその機能は簡易的なHashの代用か、Iniファイルのサポートのた めの機能と考えています。 本当にRubyらしいというならば、それをStringsの機能とせずに別なクラスとするほ うが良いのではないでしょうか。 Stringsを使うにしても、VCLのStringsよりRubyのHash、Array、Stringの方が柔軟な 操作ができるのでStringsではtextの取得設定ができればだいたい何とかなりません か? hがHashだとして、 (h.to_a.correct {|arr| arr.join('=') }).join("\n") とすれば、適切な文字列が出来上がります(たぶん^^;)。これを設定できれば設定は 特に問題ないと思います。Arrayの場合もほぼ同様ですね。 設定というのが内容を置き換えるのではなくマージするものなら、Strings#to_hash などでいったんHashにして、Hash#updateなどでマージしてから設定するのが普通で しょう。 上のコードをいちいちやるのは面倒だと思うならば、新しくStringsのオブジェクト をHashやArrayから作れるようにするのがRubyらしいと思います。それでStringsから Stringsを更新できるようにすればいいんじゃないかと。 > 現状の案では次のようになっているのですが、統一が取れていません。 > (#hash は Kernel#hash があるので却下)。 > > #array : Array #array=(array) > #values : Hash #values=(hash) > #text : String #text=(string) valuesの戻り値をHashなどにしておくと、 values['key'] = 'value' などが意図した通りに動きませんよね。 ここはHashにするより普通にkeyを引数に取るattrにしたほうがいいと思います。 あとは変更をStringsに通知できるようなHashのサブクラスを作るとか。面倒です ね。 ///////////////////////////////////////////// kumaryu / 坂本龍一 kumaryu@kumaryu.net http://www.kumaryu.net/