原です。 In [ruby-list:38452] TANAKA wrote: > インスタンス変数にしたのは、コストがかかりそうなdefined?の回数を最小限 > に抑えるためです。 > #もしかしたら、defined?より!@compの評価の方が、コストがかかるのかも。 どうでしょうね。実験してみないとわからないなあ。たしかに気に なりますけど。自分が複素ベクトルであるかどうかという情報を自 分で持つのはもっともではあります。でもそれなら、ComplexVector クラスを作るのが筋という気もするし、、、さしあたって class Vector def inner_product(v) if defined?(Complex) ... else ... end end end でいいんじゃないかな。... 部分のコードの共有ができないのは ちょっと残念ですが。ただこれを matrix.rb に記述してもらうの は難しいかも。一応 Complex の事は知らないとして matrix.rb は作られているみたいだから。 > ところで、上記のコードでは、インスタンス変数の「定義は要らない」という > 特徴を使っているつもりだったのですが、 > comp = defined?(Complex) if !comp > とも書けるようですね。当然、 > if !comp then comp = defined?(Complex) end > は、エラーになりますが。 > > 前者では、compの初期値として、nilが与えられている、と考えてよいのでしょ > うか。 あ、すいません。comp をローカル変数にするときは、if !comp は 取ります。この場合、実行前のスクリプトの解釈の段階で comp は 定義されてしまってるのです。『入門』の p.174 にもあります。 > P.S. > 原さんの『Ruby プログラミング入門』には大変お世話になっています。 マイド。 > ただ、http://www.ruby-lang.org/~sinara/nyumon/ に繋がりません。別ペー > ジに移転されたのでしょうか サーバー更新の時に削除されました。そのうち復活させます。(^^;