From: HQss_YasuiS/hq_ss@... Date: 1999-02-09T15:51:14+09:00 Subject: [ruby-dev:4895] Re: to_i,to_s の素朴な疑問 安井です。 # self.1日経つとすっかり遠くなってしまった話題のよう えーと、私の方に認識不足や落ち度が随分あったようです。 いろいろと実現できない理由を詳しく説明してくださった訳がやっと わかってきた気がします。 以下はそれを踏まえてのレスです。 >|でも、数学的な雰囲気を持たせることをキープするなら、 + メソッドは >|Numeric だけに限定すべきですよね。 > >その通りです.その辺が妥協の産物なんですね. ふむふむ。それと、メッセージ評価に優先順位を与えていますね。 つまり、実装がシンプルでなく複雑だと。 >では,今回の Numeric+String=Numeric は合理性があるんですか? 「あるstringについては数値を意味するから合理的」と言うのが いままでから一貫した私の主張ですね(ブーイングに甘んじながら)。 # self.否定意見とは、観点が違うのかも知れません >いや,ある局面で手間が減るのは肯定しますが,合理性ってのはもっ >と強い言葉ですよね.しかも,現状の仕様を変更しようと言うので >すから,変更を望む人に合理性を示すことを求めるのは合理的です >よね. ;-) 認識不足だったのは、現状の仕様でした。 思ったより複雑にしてるんですねえ。 >この場合,標準クラス(たとえばString)をどうやって定義するんで >しょうね.なお,標準クラスのメソッドをRubyレベルで再定義する >ことは可能です. 昔、Stringのソースだったかなあ、何かで見た記憶があるんですが・・・。 Degitalkのあれだったかなあ。忘れましたね。 >|>えーと,私の考えでは,すくなくともRubyにおいては仕様というの >|>は「仕様だから仕様である」のではなく,「気持ち良い,あるいは >|>間違いが発生しにくいので仕様としよう」であるべきだと考えてい >| >|なるほど。よくわかります。でも今回のケースは該当しませんよね。 > >え? 該当しないんですか? すみません。手が滑ったというか寸足らずでしたね。 ここは、今回のケースは気持ち悪いには該当しませんよね、だったはず。 特に、数学的演算オペレータについては、「気持ち良い」「誤解がない」 が優先され、合理性やオブジェクト指向的な自然さは後回しにされてしま った感が拭えません。 >String#scanf(pat) のようなものは可能ではないかと思いますが. これは妥協できる1つの解だと思います。 Object#prinf(pat) の存在を前提にすれば必然だし自然と言えましょう。 >ちょっと待ってください.ファイルストリームの内容はフラットな >バイト列(文字列と言っても構いませんが)であるというのはRubyが >依存しているUNIX文化の一部です.ですから,ストリームから読み >込んできたデータはどうやっても文字列で「本当は数値」なデータっ >てのは存在しないでしょう.数値風のフォーマットを持っているし, >数値として処理したいデータはいっぱいあるでしょうけど.その意 >味(どの文字列が数値を意味するか)は人間が与えてやる必要がある >と私は思います. そうですね。format が必要です。 >それでも,オブジェクトを直接読み書きしたいのならmarshalを使 >うとかunpackを使うとかいろいろ方法はあると思います.要は構造 >を明示してねってこと. marshal や unpack は ruby の機能でした? > * デメリット > > 数値風のフォーマットを持つ文字列は数値ではないので,左辺 > あるいはレシーバに登場したときにはやはり文字列として動作 > してしまう うーん。これがデメリットかどうかは異論があります。 文字列がレシーバのときは文字列として振る舞ってもらわないと逆に 困るのでは。 > 各演算に文字列に対する数値風のフォーマットのチェックが入 > るため実行効率が悪くなる(可能性がある) > > どのメソッドが数値風の文字列を数値として扱い,どのメソッ > ドがいつも文字列として扱うかを覚えている必要がある(いや, > ぜーんぶ変更してしまえば,覚えてなくても良いですが,今度 > はやりすぎになりそう) > > Rubyインタプリタおよび標準ライブラリについてかなり大規模 > な変更を行う必要がありそう この意味が認識不足でした。演算に優先順位をつけるための処理をやっている ため、変更が大変だということですね。 これで、いままで何度も「妥協の産物だ妥協の産物だ」とおっしゃっていたこと がようやく分った気がします。 1 + 2 * 3 => 7 #ruby風 1 + 2 * 3 => 6 # Smalltalk風(これが不自然だと) >一方,ユーザがなんらかのかたちで構造を指定する scanf/unpack >のようなタイプについては問題ないと思ってます.こちらについて >は実装する手間だけですね. そうだとは思いますが・・・ marshal はどうするのですか? # self.rubyが段々とミックスかハイブリッドに見えてきた。 -------- yasuisu@omssv.hq.hitachizosen.co.jp