[#12164] patch for ext/gdbm — Koji Arai <JCA02266@...>

新井です。

24 messages 2001/02/04
[#12168] Re: patch for ext/gdbm — matz@... (Yukihiro Matsumoto) 2001/02/05

まつもと ゆきひろです

[#12176] Re: patch for ext/gdbm — Koji Arai <JCA02266@...> 2001/02/05

新井です。

[#12179] Re: patch for ext/gdbm — matz@... (Yukihiro Matsumoto) 2001/02/06

まつもと ゆきひろです

[#12219] Re: patch for ext/gdbm — Koji Arai <JCA02266@...> 2001/02/12

新井です。

[#12220] Re: patch for ext/gdbm — Koji Arai <JCA02266@...> 2001/02/12

新井です。

[#12256] set_trace_func — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

15 messages 2001/02/17

[#12293] crash on proc without a block — Kenichi Komiya <kom@...1.accsnet.ne.jp>

15 messages 2001/02/25

[#12323] Re: [ruby-list:28364] class definition extension — "K.Kosako" <kosako@...>

ruby-listから移動しました。

13 messages 2001/02/28
[#12324] Re: [ruby-list:28364] class definition extension — matz@... (Yukihiro Matsumoto) 2001/02/28

まつもと ゆきひろです

[ruby-dev:12229] Re: String#fnmatch

From: "Akinori MUSHA" <knu@...>
Date: 2001-02-13 16:08:00 UTC
List: ruby-dev #12229
At Fri, 9 Feb 2001 13:16:50 +0900,
matz wrote:
> In message "[ruby-dev:12197] String#fnmatch"
>     on 01/02/09, "Akinori MUSHA" <knu@iDaemons.org> writes:
> 
> | ちょっとしたユーティリティを書いていて、 String#fnmatch() が
> |欲しくなって書いてみたんですが、どんなもんでしょうか。
> 
> 正規表現よりもワイルドカードの方が簡単な局面は確かにあります
> から、むげに否定はしませんが、fnmatchという名前は違うだろう、
> という気もします。

 Dir のクラスメソッドにしてみました。パッチも単純なので取り込み
やすくなったかと。 :>

 名前は何がいいんでしょうね。とりあえず fnmatch? を提案します。
他のメソッドの名前を見ても、 UNIX のライブラリ関数はできるだけ
そのまま使うのがいいと思うので。

# 「UNIX の ** に相当するメソッドは?」で探せていつも便利 :)

> そういえば、はるか昔には正規表現オブジェクトに対応するワイル
> ドカードオブジェクトってのを持ってましたねえ(遠い目)。リテラ
> ルは <*.c> だったような。いつなくなったんだっけな。

 Perl をオブジェクトで斬る、といういかにも Ruby らしいアイデア
ですね。メソッドは to_s と expand と each と match? でしょうか。

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"We're only at home when we're on the run, on the wing, on the fly"

Index: dir.c
===================================================================
RCS file: /src/ruby/dir.c,v
retrieving revision 1.28
diff -u -r1.28 dir.c
--- dir.c	2001/02/13 14:15:39	1.28
+++ dir.c	2001/02/13 15:40:19
@@ -830,6 +830,29 @@
     return rb_ensure(rb_Array, dir, dir_close, dir);
 }
 
+static VALUE
+dir_s_fnmatch(argc, argv, obj)
+    int argc;
+    VALUE *argv;
+    VALUE obj;
+{
+    VALUE pattern, string;
+    VALUE flags;
+    int f;
+
+    if (rb_scan_args(argc, argv, "21", &pattern, &string, &flags) == 3) {
+	f = NUM2INT(flags);
+    }
+    else {
+	f = 0;
+    }
+
+    if (fnmatch(RSTRING(pattern)->ptr, RSTRING(string)->ptr, f) == 0)
+	return Qtrue;
+
+    return Qfalse;
+}
+
 void
 Init_Dir()
 {
@@ -863,4 +886,10 @@
 
     rb_define_singleton_method(rb_cDir,"glob", dir_s_glob, 1);
     rb_define_singleton_method(rb_cDir,"[]", dir_s_glob, 1);
+    rb_define_singleton_method(rb_cDir,"fnmatch?", dir_s_fnmatch, -1);
+
+    rb_define_const(rb_cDir, "FNM_NOESCAPE", INT2FIX(FNM_NOESCAPE));
+    rb_define_const(rb_cDir, "FNM_PATHNAME", INT2FIX(FNM_PATHNAME));
+    rb_define_const(rb_cDir, "FNM_PERIOD", INT2FIX(FNM_PERIOD));
+    rb_define_const(rb_cDir, "FNM_NOCASE", INT2FIX(FNM_NOCASE));
 }

In This Thread