タグ

moduleに関するsnjxのブックマーク (2)

  • モジュールとクラスと名前空間 - @katzchang.contexts

    名前空間の話。入門的なサイトだと全く解説されてなかったりするけど、手元のスクリプト以上になれば必須だよねー。 モジュール/クラスの内部で定義された内部モジュール/内部クラスを外部から参照したい場合、「::」で参照する。 内部モジュール/内部クラスのメソッドを外部から書き換えたい場合、外側のクラス/モジュールを定義しなおして書き換える。直接は書き換えられない。 モジュールメソッド/クラスメソッドは、自身の内部で定義する場合、"def self.foo"で定義できる。 内部から"def Foo.foo"と定義するのと基的には同じ。だが、自身のモジュール/クラス名と同じ名前の内部モジュール/クラス名が既に定義されていた場合、"def Foo.foo"は"Foo::Foo.foo"として定義されるので要注意。 つまり、実行時点の状態によって名前空間が微妙にずれる場合があるってことか。 普段は"d

    モジュールとクラスと名前空間 - @katzchang.contexts
  • Rubyのモジュールを名前空間で使っているのかMix-inで使っているのか

    Rubyのモジュールには確かにMixinと名前空間の両方の役割があります。 ゆえに、「意図しない形で使われる可能性があるんじゃないか?」という心配が出てくるのも理解できます。 最初に確認したいのは、shingoさんは実際に困ったことがあるのか、それとも「この先困ることが出てくるのではないか?」と心配しているのか、どちらなのか?ということです。 もし前者であれば、実際に困ったときのコードを見せてもらった方が議論しやすいです。 が、僕はなんとなく後者である気がしています。 なので、ここから先は「この先困るかも?」という心配に対する答えを記述します。 そもそも、何も考えずにモジュールをデタラメにMixinしようとする人は滅多にいないと思います。 普通であれば、 xxxという機能を実現したい yyyというモジュールにその機能がある だからyyyをMixinしよう(=incudeまたはextendし

    Rubyのモジュールを名前空間で使っているのかMix-inで使っているのか
  • 1