[#26253] Perl/Ruby Conference — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
わたなべです.
なかだです。
[#26274] アプリにマクロをつけるのについて — polygon <kiyose@...>
ポリゴンです。
[#26278] Ruby/KAKASI bug? — SHIRAKURA Tetsuya <shirakura@...>
しらくらです。
> 次のような,KAKASI で変換する script を実行させると,どんどんメモリを喰
[#26295] tail -f のように読み続ける方法は? — Kazuhiro NISHIYAMA <zn@...>
tail -fのようにだんだん大きくなるファイルを読み込み続けるのは
まつもと ゆきひろです
渡辺哲也です。
On Mon, 4 Dec 2000 10:18:47 +0900
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
とみたです。
まつもと ゆきひろです
ごとうゆうぞうです。
まつもと ゆきひろです
ごとうゆうぞうです。
[#26309] DDJ — KIMURA Koichi <kimura.koichi@...>
[#26313] 並行するスレッドの記述法について — Kenya OGATA <ind.onosetu1@...>
おがたといいます。
なかだです。
おがたです。なかださんコメントありがとうございます。
なかだです。
村木@日立ITです。
なかだです。
村木です
こんにちは、なかむら(う)です。
村木です。
こんにちは、なかむら(う)です。
村木です。
こんにちは、なかむら(う)です。
[#26381] はじめまして — tkondo@...
メーリングリストの皆さんはじめまして。
[#26384] [PATCH] stupid bug/miss — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
[#26413] TMail: UNIX From in MH format(?) — OZAWA -Crouton- Sakuro <crouton@...>
さくです。
[#26415] cgi.rb で InsecureOperation — Takeshi Komiya <katsuwo@...>
青山です。
[#26475] Regexp.new のオプション — URA Takefumi <hage@...>
こんなことをやってみました。
[#26513] media watch 2000.12.08 — Noritsugu Nakamura <nnakamur@...>
[#26516] n-fold loop — Hiroshi SATO <hiroshi@...>
佐藤と申します.
[#26532] Win で dRuby — m_seki@...
[#26536] ファイル名が文字化け — KUROSAWA Takashi <tabby@...>
Tabby as くろさわ@秩父です。
わたなべです.
[#26547] size of raa — Minero Aoki <aamine@...>
あおきです。
まつもと ゆきひろです
Toshです。
そのメンバー(?)の一人の高橋征義です。
[#26554] Hash.new — Takao KAWAMURA <kawamura@...>
Hash.newの挙動について、理解できないことがありましたので、教
ごとけんです
なかだです。
In message "[ruby-list:26559] Re: Hash.new"
まつもと ゆきひろです
In message "[ruby-list:26564] Re: Hash.new"
At Sun, 17 Dec 2000 02:23:14 +0900,
In message "[ruby-list:26566] Re: Hash.new"
At Sun, 17 Dec 2000 03:28:55 +0900,
まつもと ゆきひろです
なかだです。
デフォルトって、現状だと += などの演算代入しか恩恵を受けない
At Sun, 17 Dec 2000 22:55:30 +0900,
まつもと ゆきひろです
ごとけんです
At Tue, 19 Dec 2000 01:37:31 +0900,
In message "[ruby-list:26619] Re: Hash.new, fetch, block argument, default"
[#26605] [Q] Oracle PL/SQL with bind vars — Hideto ISHIBASHI <hideto-i@...4u.or.jp>
石橋秀仁です。
よしだです
石橋秀仁です。よしださん、リプライありがとうございます。
よしだです
石橋秀仁です。こんばんは。
石橋秀仁です。こんばんは。
渡辺哲也です。
石橋秀仁です。こんばんは。
わたなべです.
なひです。
[#26609] net/http,smtp,pop 1.2 pre 1 — Minero Aoki <aamine@...>
あおきです。
On Mon, 18 Dec 2000 23:04:32 +0900
高橋征義です。
あおきです。
artonです。
[#26628] Hash.reject returns a Hash? — Takao KAWAMURA <kawamura@...>
1.4.6のドキュメントには
わたなべです.
[#26658] cgi.rb and Regexp::last_match — OHSHIMA Ryunosuke <ryu@...>
大島です。
青山です。
まつもと ゆきひろです
青山です。
原です。
まつもと ゆきひろです
有馬です。
まつもと ゆきひろです
At Fri, 22 Dec 2000 15:03:17 +0900,
まつもと ゆきひろです
有馬です。
まつもと ゆきひろです
有馬です。
まつもと ゆきひろです
ごとけんです
新井です。
[#26659] FILE.eof などについて — Hiroyuki Kai <hiroyuki@...104.net>
はじめまして、この度ruby-listに入りました甲斐と申します。
[#26667] racc -E — Tadayoshi Funaba <tadf@...>
ふなばです。
[#26670] Re: cgi.rb and Regexp::last_match — "K.Kosako" <kosako@...>
さっきruby-listに入ったばかりなので、
まつもと ゆきひろです
> まつもと ゆきひろです
まつもと ゆきひろです
前田です。
> 前田です。
前田です。
> 前田です。
まつもと ゆきひろです
前田です。
> 前田です。
[#26700] cygwin 版の eruby が動きません。 — Keisuke Minami <keisuke@...>
こんばんは。三並です。
[#26725] ruby 1.6.2-preview4 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
なかだです。
有馬です。
清水(simtak)@biglobeです。
[#26735] gpib-rb — kiwamu <kiwamu@...>
こんにちは。岡部と申します。
皆さんこんにちは、田鎖です。
皆さん今晩は、田鎖です。
こんにちは。岡部です。
[#26745] misc — "ページコム佐藤" <k-satoh@...>
佐藤@おおいたページです。
[#26750] Ruby SHINNENKAI 2001 — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
[#26803] ruby-mode.el: / — Takao KAWAMURA <kawamura@...>
ruby-mode.el 1.24 の話ですが、例えば
[#26846] Ruby 1.6.2 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#26865] Windows2000 について — 石田 宏香 <h-ishida@...>
はじめまして♪
[#26875] cgi.rb <form>element BUG — MoonWolf <moonwolf@...>
cgi.rb Version 2.1.2 1246行目からの
[#26895] Ruby の言語仕様の策定 — Hiroyuki Kai <hiroyuki@...104.net>
甲斐@Ruby超初心者です。
[#26926] RD で引用 — rubikitch <rubikitch@...>
るびきちです。
[#26932] Struct の parse — Keisuke Minami <keisuke@...>
こんばんは。三並です。
[#26949] www.ruby-lang.org で気がついたこと — Keisuke Minami <keisuke@...>
こんばんは。三並です。
[ruby-list:26582] Re: Hash.new
なかだです。
At Sun, 17 Dec 2000 22:55:30 +0900,
matz@zetabits.com (Yukihiro Matsumoto) wrote:
> 今回の問題はデフォルト値が代入されないことだけが問題ではない
> のだろうと思います。今度はきっと配列が共有されているので、
> modifyしたら思わぬ変更が行われてしまったと、ひっかかる人が出
> るでしょう。
この場合、別のところに代入されるものは当然別のオブジェクトと
いうのが自然な気がします。
> たとえば、ブロックによるデフォルトならば、代入することに意味
> があるのかもしれませんが、参照しただけでデフォルト値が追加さ
> れることには反対です。
>
> ary =[]
> ary[1000]
>
> だけで配列のサイズが拡大されてしまうような動作だと思います。
これは同感なのですが、ブロックを前提にすれば自動的に代入され
るのも意外と違和感ないかも。ブロックを使えば普通に書いた場合毎
回別個になるはずだし、逆に代入しないとブロックの結果が失われて
しまうような。
ちょっと試してみました。hash.c の HASH_AUTOADD をセットすれば
自動的に代入するようになります。
diff -rup current/eval.c devel/eval.c
--- current/eval.c Tue Dec 12 23:19:13 2000
+++ devel/eval.c Sun Dec 17 11:44:04 2000
@@ -6101,6 +6101,41 @@ callargs(args)
}
}
+VALUE
+rb_proc_callv(proc, argc, argv)
+ VALUE proc;
+ int argc;
+ VALUE *argv;
+{
+ return proc_call(proc, argc > 0 ? rb_ary_new4(argc, argv) : Qundef);
+}
+
+VALUE
+#ifdef HAVE_STDARG_PROTOTYPES
+rb_proc_call(VALUE proc, int argc, ...)
+#else
+rb_proc_call(proc, argc, va_alist)
+ VALUE proc;
+ int argc;
+ va_dcl
+#endif
+{
+ VALUE *argv;
+
+ if (argc > 0) {
+ int i;
+ va_list ar;
+ argv = ALLOCA_N(VALUE, argc);
+
+ va_init_list(ar, argc);
+ for (i = 0; i < argc; i++) {
+ argv[i] = va_arg(ar, VALUE);
+ }
+ va_end(ar);
+ }
+ return rb_proc_callv(proc, argc, argv);
+}
+
static VALUE
proc_call(proc, args)
VALUE proc, args; /* OK */
diff -rup current/hash.c devel/hash.c
--- current/hash.c Tue Dec 5 23:19:16 2000
+++ devel/hash.c Sun Dec 17 12:06:26 2000
@@ -18,6 +18,8 @@
#include "rubysig.h"
#define HASH_DELETED FL_USER1
+#define HASH_PROCDEF FL_USER2
+#define HASH_AUTOADD 0 /* FL_USER3 */
static void
rb_hash_modify(hash)
@@ -205,7 +207,14 @@ rb_hash_initialize(argc, argv, hash)
rb_scan_args(argc, argv, "01", &ifnone);
rb_hash_modify(hash);
- RHASH(hash)->ifnone = ifnone;
+ if (argc == 0 && rb_block_given_p()) {
+ RHASH(hash)->ifnone = rb_f_lambda();
+ FL_SET(hash, HASH_PROCDEF | HASH_AUTOADD);
+ }
+ else {
+ RHASH(hash)->ifnone = ifnone;
+ FL_UNSET(hash, HASH_PROCDEF | HASH_AUTOADD);
+ }
return hash;
}
@@ -285,13 +294,39 @@ rb_hash_rehash(hash)
}
VALUE
+rb_hash_autoadd(hash)
+ VALUE hash;
+{
+ return FL_TEST(hash, HASH_AUTOADD) ? Qtrue : Qfalse;
+}
+
+VALUE
+rb_hash_set_autoadd(hash, val)
+ VALUE hash, val;
+{
+ if (RTEST(val))
+ FL_SET(hash, HASH_AUTOADD);
+ else
+ FL_UNSET(hash, HASH_AUTOADD);
+ return val;
+}
+
+VALUE
rb_hash_aref(hash, key)
VALUE hash, key;
{
VALUE val;
if (!st_lookup(RHASH(hash)->tbl, key, &val)) {
- return RHASH(hash)->ifnone;
+ if (FL_TEST(hash, HASH_PROCDEF)) {
+ val = rb_proc_callv(RHASH(hash)->ifnone, 1, &key);
+ }
+ else {
+ val = RHASH(hash)->ifnone;
+ }
+ if (FL_TEST(hash, HASH_AUTOADD)) {
+ rb_hash_aset(hash, key, val);
+ }
}
return val;
}
@@ -326,6 +361,11 @@ static VALUE
rb_hash_default(hash)
VALUE hash;
{
+ if (rb_block_given_p()) {
+ RHASH(hash)->ifnone = rb_f_lambda();
+ FL_SET(hash, HASH_PROCDEF | HASH_AUTOADD);
+ return hash;
+ }
return RHASH(hash)->ifnone;
}
@@ -337,6 +377,13 @@ rb_hash_set_default(hash, ifnone)
return hash;
}
+static VALUE
+rb_hash_has_block_p(hash)
+ VALUE hash;
+{
+ return FL_TEST(hash, HASH_PROCDEF) ? Qtrue : Qfalse;
+}
+
static int
index_i(key, value, args)
VALUE key, value;
@@ -1451,6 +1498,9 @@ Init_Hash()
rb_define_method(rb_cHash,"store", rb_hash_aset, 2);
rb_define_method(rb_cHash,"default", rb_hash_default, 0);
rb_define_method(rb_cHash,"default=", rb_hash_set_default, 1);
+ rb_define_method(rb_cHash,"autoadd", rb_hash_autoadd, 0);
+ rb_define_method(rb_cHash,"autoadd=", rb_hash_set_autoadd, 1);
+ rb_define_method(rb_cHash,"has_block?", rb_hash_has_block_p, 0);
rb_define_method(rb_cHash,"index", rb_hash_index, 1);
rb_define_method(rb_cHash,"indexes", rb_hash_indexes, -1);
rb_define_method(rb_cHash,"indices", rb_hash_indexes, -1);
diff -rup current/intern.h devel/intern.h
--- current/intern.h Fri Dec 8 23:19:13 2000
+++ devel/intern.h Sun Dec 17 11:45:12 2000
@@ -142,6 +142,8 @@ VALUE rb_protect _((VALUE (*)(), VALUE,
void rb_set_end_proc _((void (*)(), VALUE));
void rb_mark_end_proc _((void));
void rb_exec_end_proc _((void));
+VALUE rb_proc_callv _((VALUE, int, VALUE*));
+VALUE rb_proc_call __((VALUE, int, ...));
void ruby_finalize _((void));
void ruby_stop _((int));
void rb_gc_mark_threads _((void));
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦