[ruby-list:477] Re: bug? and question

From: matz@... (Yukihiro Matsumoto)
Date: 1996-09-02 08:09:52 UTC
List: ruby-list #477
まつもと ゆきひろです.

In message "[ruby-list:474] bug? and question"
    on 96/09/02, Keiju ISHITSUKA <keiju@shljapan.co.jp> writes:
|
|けいじゅ@SHLジャパンです. 
|
|バグレポート(?)と幾つか質問があります.
|
|1. rand(0)
|
|rand(0)
|
|を実行すると, Arithmetic関係のエラーを出して落ちます. まあ, 使い方が悪
|いのですが, 落ちるのだけは勘弁して下さい.

全くです.対応します.

|2. ::と.の結合度
|
|::と.の結合度がおかしくないですか?
|
| Foo::Bar.baz() --> Foo::(Bar.baz())
|
|と結合しているみたいです. こういう使い方はしないはずだと思うのですが??

全くです.昔々 :: が別の意味を持っていたころの名残が文法に残っ
ていました

|3. next
|nextがデフォルトでプライベートになります.

これはそういうものです.nextは制御構造ですから,再定義するの
はお勧めしません.

つまり,スーパークラスで定義されているクラスをオーバーライド
する時には元のクラスの属性を引き継ぎます.nextがprivateとし
て定義されていますから,再定義した場合もprivateです.

変更したい時には明示的に変更してください.

|4. def Foo.[]
|
|class Foo
|  def Foo.[](index)
|
|つまり, クラスに関してのオペレータの特異メソッドが定義できません. それ
|とも私が悪いのかしら?

いいえ,字句解析機のバグです.修正しました.

|5. 特異メソッド中のinclude
|
|特異メソッド中でモジュールをインクルードしたい時にはどうすれば良いので
|しょうか?

特定のオブジェクトにモジュールの機能を追加したい時にはextend
を使ってください.

  class Foo
    extend Math
    def Foo.foo
      print sin(1)
    end
  end

それとKernel#typeは次のバージョンからそのオブジェクトの「ク
ラス名」を返すようになります.非互換性がありますが,必要なら
ば

  eval(obj.type)

に置き換えればほとんどの場合大丈夫でしょう.

|あと, あるメソッド内だけでインクルードする機能とかはないんですか?

rubyの場合インクルードは名前空間だけでなく,クラスの性質その
ものを変えてしまうので,そういう機能は存在できないはずです.

                                まつもと ゆきひろ /:|)

In This Thread

Prev Next