けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev :16304 ] the message: "[ruby-dev:16304] Re: defined? 
autoload constant ", on Mar/10 00:03(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>|> あれはcomplex.rbがautoload的にお行儀が悪い(Rationalが定義さ
>|> れているかどうかで、Fixnumが拡張されているかどうかを判定して
>|> いる)のが原因なので、本当に対応する必要があるかどうかは疑問
>|> です。
>|
>|重複してaliasするのを避けるためのように見えるので、これでどうで
>|しょうか。
>
>石塚さんが納得したらコミットしたいです。どう? > keiju

えー. いま, RationalとComplexとMatrixをちょっとずつ直しているので, まと
めて行います.

ところで, [ruby-dev:16298]では, method_defined?を使っていますが,
defined?ではまずい理由ありますの?

あ, そうそう, Complex#to_sは以下のような定義になっています.

#--
class Complex
  def to_s
    if @real != 0
      if defined?(Rational) and @imag.kind_of?(Rational) and @imag.denominator != 1
	if @imag >= 0
	  @real.to_s+"+("+@imag.to_s+")i"
	else
	  @real.to_s+"-("+(-@imag).to_s+")i"
	end
      else
	if @imag >= 0
	  @real.to_s+"+"+@imag.to_s+"i"
	else
	  @real.to_s+"-"+(-@imag).to_s+"i"
	end
      end
    else
      if defined?(Rational) and @imag.kind_of?(Rational) and @imag.denominator != 1
	"("+@imag.to_s+")i"
      else
	@imag.to_s+"i"
      end
    end
  end
end

##--

で, autoloadされた定数がConstantを返すのはやはりまずいのでは? または,
autoloadされているかどうかを定数ベースで判断できる方法がないとどっちなの
か区別できないと思うのですが?

__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju / rational.com <<---