[#13087] importing forwardable — "Akinori MUSHA" <knu@...>

 石塚さんの forwardable.rb を標準添付ライブラリにするべく、

11 messages 2001/05/02

[#13169] SizedQueue#pop causes deadlock — "Okada Jun" <yun@...>

岡田です。

18 messages 2001/05/13
[#13171] Re: SizedQueue#pop causes deadlock — "Akinori MUSHA" <knu@...> 2001/05/13

At Sun, 13 May 2001 14:11:18 +0900,

[#13176] Re: SizedQueue#pop causes deadlock — matz@... (Yukihiro Matsumoto) 2001/05/13

まつもと ゆきひろです

[#13177] Re: SizedQueue#pop causes deadlock — "Akinori MUSHA" <knu@...> 2001/05/13

At Mon, 14 May 2001 00:24:45 +0900,

[#13187] Re: SizedQueue#pop causes deadlock — matz@... (Yukihiro Matsumoto) 2001/05/13

まつもと ゆきひろです

[#13202] Re: [ruby-list:29672] Re: Enumerator — "Akinori MUSHA" <knu@...>

 ruby-dev に移ります。

26 messages 2001/05/15
[#13208] Re: [ruby-list:29672] Re: Enumerator — matz@... (Yukihiro Matsumoto) 2001/05/15

まつもと ゆきひろです

[#13259] Enumerator -- Round 2 — "Akinori MUSHA" <knu@...>

 もう一度、 Enumerable/Enumerator についてみなさんのご意見を

29 messages 2001/05/20
[#13260] Re: Enumerator -- Round 2 — matz@... (Yukihiro Matsumoto) 2001/05/20

まつもと ゆきひろです

[#13265] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/21

At Mon, 21 May 2001 06:04:32 +0900,

[#13268] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/21

原です。

[#13270] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/21

At Mon, 21 May 2001 15:00:11 +0900,

[#13289] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/22

原です。

[#13290] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/22

At Tue, 22 May 2001 19:02:10 +0900,

[#13291] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/22

原です。

[#13293] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/22

At Tue, 22 May 2001 20:57:02 +0900,

[#13305] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/24

原です。

[#13322] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/24

At Thu, 24 May 2001 15:44:14 +0900,

[#13277] ext/dbm in ruby 1.7 — Kazuhiro NISHIYAMA <zn@...>

ruby 1.7のext/dbmですが、

16 messages 2001/05/21
[#13280] Re: ext/dbm in ruby 1.7 — matz@... (Yukihiro Matsumoto) 2001/05/21

まつもと ゆきひろです

[#13292] Integer("X") rescue -1 が parse error — YASUI Kentarow <kenyasui@...>

安井です。

18 messages 2001/05/22
[#13294] Re: Integer("X") rescue -1 が parse error — matz@... (Yukihiro Matsumoto) 2001/05/22

まつもと ゆきひろです

[#13295] Re: Integer("X") rescue -1 が parse error — "Akinori MUSHA" <knu@...> 2001/05/23

At Wed, 23 May 2001 08:59:50 +0900,

[#13300] 1.6.4 preview3 (Re: Re: Integer("X") rescue -1 が parse error) — matz@... (Yukihiro Matsumoto) 2001/05/24

[#13304] Re: 1.6.4 preview3 (Re: Re: Integer("X") rescue -1 が parse error) — "Akinori MUSHA" <knu@...> 2001/05/24

At Thu, 24 May 2001 14:15:04 +0900,

[#13428] mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

19 messages 2001/05/31
[#13435] Re: mswin32/ming32 system patch (experimental) — nobu.nakada@... 2001/06/01

なかだです。

[#13442] Re: mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...> 2001/06/01

こんにちは、なかむら(う)です。

[#13446] Re: mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...> 2001/06/02

こんにちは、なかむら(う)です。

[#13450] Re: mswin32/ming32 system patch (experimental) — nobu.nakada@... 2001/06/04

なかだです。

[ruby-dev:13240] Re: SizedQueue#pop causes deadlock

From: GOTOU Yuuzou <gotoyuzo@...>
Date: 2001-05-18 03:58:27 UTC
List: ruby-dev #13240
In message <86bsosez1y.wl@archon.local.idaemons.org>,
 `"Akinori MUSHA" <knu@iDaemons.org>' wrote:
> At Fri, 18 May 2001 00:10:07 +0900,
> U.Nakamura <usa@osb.att.ne.jp> wrote:
> > sha1_new() 内の rb_obj_call_init() は不要ではないかと思うの
> > ですが、どうでしょう?
> > これがあると、new に引数を与えると ArgmentError になります。
> 
>  その通りでした。下で引数がある場合には sha1_update(obj, arg)
> しているので、 initialize() を呼ぶ必要はありませんね。

このへんをどう書くかいつも迷うのですが、拡張ライブラリのクラス
を継承した場合などに initialize() を呼んで欲しくても、new() の
中で rb_scan_args() や Check_Type() していると、引数の数や評価
の仕方を変更できなくて困ることがあります。

そこで、デフォルトの initialize() を C で実装して、引数の処理
についてはそちらで行うようにすれば、サブクラスの initialize() 
で引数を調整して super() を呼べば済むので便利だと思うのですが、
いかがでしょうか?

そうなっていないものもあるので、お作法としてどうあるべきかとい
う所から始めたほうがいいかもしれませんけれど。

--
ごとうゆうぞう

Index: sha1-ruby.c
===================================================================
RCS file: /home/ncvs/ruby-lang/ruby/ext/sha1/sha1-ruby.c,v
retrieving revision 1.2
diff -u -r1.2 sha1-ruby.c
--- sha1-ruby.c	2001/05/17 16:13:34	1.2
+++ sha1-ruby.c	2001/05/18 03:17:56
@@ -64,22 +64,32 @@
 }
 
 static VALUE
+sha1_init(argc, argv, self)
+    int argc;
+    VALUE* argv;
+    VALUE self;
+{
+    VALUE arg;
+
+    rb_scan_args(argc, argv, "01", &arg);
+    if (!NIL_P(arg)){
+	sha1_update(self, arg);
+    }
+    return self;
+}
+
+static VALUE
 sha1_new(argc, argv, class)
     int argc;
     VALUE* argv;
     VALUE class;
 {
-    VALUE arg, obj;
+    VALUE obj;
     SHA1_CTX *sha1;
 
-    rb_scan_args(argc, argv, "01", &arg);
-    if (!NIL_P(arg)) Check_Type(arg, T_STRING);
-
     obj = Data_Make_Struct(class, SHA1_CTX, 0, free, sha1);
     SHA1Init(sha1);
-    if (!NIL_P(arg)) {
-	sha1_update(obj, arg);
-    }
+    rb_obj_call_init(obj, argc, argv);
 
     return obj;
 }
@@ -93,6 +103,7 @@
     rb_define_singleton_method(cSHA1, "sha1", sha1_new, -1);
 
     rb_define_method(cSHA1, "update", sha1_update, 1);
+    rb_define_method(cSHA1, "initialize", sha1_init, -1);
     rb_define_method(cSHA1, "<<", sha1_update, 1);
     rb_define_method(cSHA1, "digest", sha1_digest, 0);
     rb_define_method(cSHA1, "hexdigest", sha1_hexdigest, 0);

In This Thread