[#38020] irb で %W(#{...}) — yoshihisa masuda <sacong@...>
マスダといいます。
[#38036] undef variable — hirocy <hirocy@...>
hirocyです.
[#38039] proc method — "K.Sasada" <ko1@...>
こんにちは。ささだです。
[#38056] ファイル書換え? — 中村文建 <tx6f-nkmr@...>
初めまして、MLに参加させて頂く中村と申します。
[#38057] [ANN] Ruby-GNOME2-0.6.0 — Masao Mutoh <mutoh@...>
むとうです。
[#38059] [ANN] rbbr-0.3.0 — Masao Mutoh <mutoh@...>
むとうです。
[#38073] module extendable? — Takeshi Horinouchi <horinout@...>
堀之内と申します。
[#38080] ポートが閉じているときの例外など — Mitsuru Ogino <ogino@...>
荻野と申します。いつも質問や要望ばかりですみません。
なかだです。
いわおかです。
荻野です。
なかだです。
いわおかです。
In message <20030812150516.GV37221@barber.fe.rn.tuat.ac.jp>
中川と申します。
In message <20030814.140757.707824131.tetsuo@sapphire.siz.nes.nec.co.jp>
なかだです。
In message <200308160517.h7G5HcPL012839@sharui.nakada.kanuma.tochigi.jp>
なかだです。
In message <200308180959.h7I9xnb7001977@sharui.nakada.kanuma.tochigi.jp>
なかだです。
まつもと ゆきひろです
[#38090] ruby-1.8 で eruby が SEGV — Kazuhiko <kazuhiko@...>
かずひこです。
[#38104] XMLRPC::ModRubyServer — OHARA Shigeki <os@...>
大原です。
[#38122] ruby-tcpwrap and mkmf.rb — Takahiro Kambe <taca@...>
こんにちは。
At Sat, 16 Aug 2003 12:51:55 +0900,
In message <200308160518.h7G5IXPL012842@sharui.nakada.kanuma.tochigi.jp>
なかだです。
In message <200308160714.h7G7ErPL014647@sharui.nakada.kanuma.tochigi.jp>
前田です。
In message <87d6f3znlc.wl@kirk.priv.netlab.jp>
前田です。
わたなべです。
[#38164] Ruby1.8.0でRuby-PostgreSQLがビルドできない — kensaku Maki <sakaki@...>
はじめまして、まきと申します。
[#38183] String << の動作につきまして — kuto@...
うと と申します。
たけ(tk)です。
ふなばです。
たけ(tk)です。
ふなばです。
たけ(tk)です。
ふなばです。
ども、西啓一朗@Ktouth Brand. です。
ふなばです。
ども、西啓一朗@Ktouth Brand. です。
[#38195] 理解の進め方(Re: String << の動作につきまして) — Tadashi Oh-Ya <toy@...>
おおやです。
たけ(tk)です。
In "[ruby-list:38206] 理解の進め方:シュールな世界"
たけ(tk)です
[#38198] Tmailで送るメールに日付がつけられなくなりました — 川田誠司 <kawada.seiji@...>
はじめまして
[#38256] かみ砕いた説明をすべき範囲 — 西 啓一朗 <receiver@...>
ども。西啓一朗@Ktouth Brand. です。
なかだです。
たけ(tk)です
なかだです。
たけ(tk)です
いわおかです。
たけ(tk)です
まつもと ゆきひろです
たけ(tk)です。
たけ(tk)です。
[ruby-list:38089] Re: module extendable?
なかだです。
At Mon, 11 Aug 2003 18:25:47 +0900,
Takeshi Horinouchi wrote:
> > module_functionは、インスタンスメソッドをメタクラスにコピーして
> > 元のインスタンスメソッドはprivateにします。
>
> ちゃんと理解できてませんが、module_function にするものは、もとは
> public_class_method でないといけないんですね。確かにマニュアルを
> 見ると、module_function は、プライベートかつモジュール関数にする
> と書いてあります。
もとはインスタンスメソッドとして定義されている必要があります。
publicである必要はありません。
> > > なお、module Bar において extend でなく include にしてもだめです。
> > >
> > > /.../nested_modules2.rb:18:in `there': undefined method `there'
> > > for Bar:Module (NameError)
> > > from /.../nested_modules2.rb:26
> >
> > スーパークラスのクラスメソッドが継承されるように、includeされた
> > モジュールのクラスメソッドも継承されるべき、ということでしょう
> > か。
>
> 理解できてないので、「べき」かどうかは全くわかりません。
> class に include する場合にはモジュール内に別のモジュールを
> include できるので、類推でやってみたけど出来なかったまでです。
その類推が合理的かどうかということですね。個人的にはこれはでき
ていいのではないかと思います。
> ただ、
>
> public_class_method :there
>
> とするよりもわかりやすい方法があってもいい気はします。
> (あるいはこの手法をマニュアルに載せるか...。
> もし、これが想定されてない「裏技」ならば、将来使えなくなる
> かもと、少し不安に思います。)
むしろ、Module#extendとModule#module_functionの動作からは当然の
帰結なので、不要になることはあっても動かなくなる可能性は低いと
思います。
Index: class.c
===================================================================
RCS file: /cvs/ruby/src/ruby/class.c,v
retrieving revision 1.76
diff -u -2 -p -r1.76 class.c
--- class.c 6 Aug 2003 21:50:05 -0000 1.76
+++ class.c 12 Aug 2003 06:33:56 -0000
@@ -352,5 +352,5 @@ rb_include_module(klass, module)
VALUE klass, module;
{
- VALUE p, c;
+ VALUE p, c, m;
int changed = 0;
@@ -367,10 +367,12 @@ rb_include_module(klass, module)
}
+ again:
OBJ_INFECT(klass, module);
c = klass;
- while (module) {
+ m = module;
+ while (m && m != klass) {
int superclass_seen = Qfalse;
- if (RCLASS(klass)->m_tbl == RCLASS(module)->m_tbl)
+ if (RCLASS(klass)->m_tbl == RCLASS(m)->m_tbl)
rb_raise(rb_eArgError, "cyclic include detected");
/* ignore if the module included already in superclasses */
@@ -378,5 +380,5 @@ rb_include_module(klass, module)
switch (BUILTIN_TYPE(p)) {
case T_ICLASS:
- if (RCLASS(p)->m_tbl == RCLASS(module)->m_tbl) {
+ if (RCLASS(p)->m_tbl == RCLASS(m)->m_tbl) {
if (!superclass_seen) {
c = p; /* move insertion point */
@@ -390,8 +392,13 @@ rb_include_module(klass, module)
}
}
- c = RCLASS(c)->super = include_class_new(module, RCLASS(c)->super);
+ c = RCLASS(c)->super = include_class_new(m, RCLASS(c)->super);
changed = 1;
skip:
- module = RCLASS(module)->super;
+ m = RCLASS(m)->super;
+ }
+ if (BUILTIN_TYPE(klass) != T_ICLASS && !FL_TEST(klass, FL_SINGLETON)) {
+ klass = RBASIC(klass)->klass;
+ module = RBASIC(module)->klass;
+ if (module) goto again;
}
if (changed) rb_clear_cache();
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦