[#9445] thread.rb — m_seki@...

18 messages 2000/03/16
[#9446] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/17

[#9460] Re: thread.rb — m_seki@... 2000/03/21

[#9462] Re: thread.rb — matz@... (Yukihiro Matsumoto) 2000/03/21

まつもと ゆきひろです

[#11281] Re: thread.rb — Masatoshi SEKI <m_seki@...> 2000/10/22

[#9498] timeout しない timeout — ARIMA Yasuhiro <fit0298@...>

有馬です。

20 messages 2000/03/26
[#9506] Re: timeout しない timeout — matz@... (Yukihiro Matsumoto) 2000/03/27

まつもと ゆきひろです

[#9509] Re: timeout しない timeout — gotoken@... (GOTO Kentaro) 2000/03/27

In message "[ruby-dev:9506] Re: timeout しない timeout"

[ruby-dev:9473] Symbol#<=>

From: Koji Arai <JCA02266@...>
Date: 2000-03-23 17:41:16 UTC
List: ruby-dev #9473
新井です。

Symbolは、comparableであっても良いと思うのですがどうでしょ?

# Symbolを含む配列をソートする処理が1.5でこけるのです。

以下、途中まで実装してみました。ただし、

・ sym2の型チェック忘れてる。
・ Comparable をインクルードするのを忘れてる。
・ Symbol <=> Fixnum、Fixnum <=> Symbol を可能にするべき?
・ Symbol <=> String、String <=> Symbol を可能にするべき?

ですけど。

Index: object.c
===================================================================
RCS file: /home/cvs/ruby/object.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 object.c
--- object.c	2000/03/09 08:59:54	1.13
+++ object.c	2000/03/23 16:26:39
@@ -507,6 +507,21 @@ sym_to_s(sym)
 }
 
 static VALUE
+sym_cmp(sym1, sym2)
+    VALUE sym1, sym2;
+{
+    char *str1, *str2;
+
+    if (sym1 == sym2)
+	return INT2FIX(0);
+
+    str1 = rb_id2name(SYM2ID(sym1));
+    str2 = rb_id2name(SYM2ID(sym2));
+
+    return INT2FIX(strcmp(str1, str2));
+}
+
+static VALUE
 sym_id2name(sym)
     VALUE sym;
 {
@@ -1114,6 +1129,7 @@ Init_Object()
 
     rb_cSymbol = rb_define_class("Symbol", rb_cObject);
     rb_undef_method(CLASS_OF(rb_cSymbol), "new");
+    rb_define_method(rb_cSymbol, "<=>", sym_cmp, 1);
     rb_define_method(rb_cSymbol, "type", sym_type, 0);
     rb_define_method(rb_cSymbol, "to_i", sym_to_i, 0);
     rb_define_method(rb_cSymbol, "to_s", sym_to_s, 0);

--
新井康司 (Koji Arai)

In This Thread

Prev Next