[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の場合インクルードは名前空間だけでなく,クラスの性質その
ものを変えてしまうので,そういう機能は存在できないはずです.
まつもと ゆきひろ /:|)