原さん、お答えありがとうございます。 >> @comp = defined?(Complex) if !@comp >> といった処理を書くべきでしょうか。 > >そういうことですね。ただしここの comp はローカル変数でいいで インスタンス変数にしたのは、コストがかかりそうなdefined?の回数を最小限 に抑えるためです。 #もしかしたら、defined?より!@compの評価の方が、コストがかかるのかも。 ところで、上記のコードでは、インスタンス変数の「定義は要らない」という 特徴を使っているつもりだったのですが、 comp = defined?(Complex) if !comp とも書けるようですね。当然、 if !comp then comp = defined?(Complex) end は、エラーになりますが。 前者では、compの初期値として、nilが与えられている、と考えてよいのでしょ うか。 >そもそも Vector の各要素を、ユーザーが実数として扱いたいのか >複素数として扱いたいのか分からないですよね。4元数体の元かも >しれないし、まったく別のオブジェクトとして扱いたいのかもしれ >ない。 了解しました。 Vector#absでなく、Vector#rであるのも、その辺が理由なのでしょうか。 たびたびすいませんが、よろしくお願いします。 P.S. 原さんの『Ruby プログラミング入門』には大変お世話になっています。 ただ、http://www.ruby-lang.org/~sinara/nyumon/ に繋がりません。別ペー ジに移転されたのでしょうか 田中 健太(TANAKA Kenta) 論理によって証明し、直感によって考え出す。