[#5218] Ruby Book Eng tl, ch1 question — Jon Babcock <jon@...>
From: Jon Babcock <jon@kanji.com>
Thanks.
From: Jon Babcock <jon@kanji.com>
Ah, thanks, I think I get it, a slightly different nuance then.
From: Jon Babcock <jon@kanji.com>
'Because all of Ruby has been...' -> 'Because Ruby has been...'?
[#5221] better way to say 'recursive join' — Yasushi Shoji <yashi@...>
in [ruby-dev:6289], Shugo Maeda suggested better name for recursive
[#5240] Ruby for Win32/DOS — Dennis Newbold <dennisn@...>
Not all of us are blessed with the opportunity to be able to develop on
[#5254] problem: undefined method `size' for File — "葡ic Santonacci" <Eric.Santonacci@...>
Hi all,
HI,
[#5264] Re: problem: undefined method `size' for Fil e — Aleksi Niemel<aleksi.niemela@...>
matz critizes good solution argumenting with features lacking from some
[#5268] Proper ConditionVariable usage? — Aleksi Niemel<aleksi.niemela@...>
Abstract
On Wed, 04 Oct 2000 07:05:22 +0900, Aleksi Niemelwrote:
In message <20001004110040.A26666@xs4all.nl>
Hi,
[#5276] Re: Ruby Book Eng tl, ch1 question — schneik@...
[#5310] Errata for Ruby Book? — Jon Babcock <jon@...>
[#5318] Redefining super method as singleton? — Robert Feldt <feldt@...>
On Fri, 6 Oct 2000, Yukihiro Matsumoto wrote:
[#5329] Ruby vs PHP ? — "Valerio Bamberga" <bamberga@...>
Hi!
[#5331] Unit testing network code? — Hugh Sasse Staff Elec Eng <hgs@...>
Can someone give me pointers on how to Unit Test code that is run on
> I think maybe one would test each end on its own first, faking the
[#5335] string streams in Ruby? — Hugh Sasse Staff Elec Eng <hgs@...>
Is there any way, without going through "modifying the internals",
[#5346] Is Ruby "enough better"? — Gabriel Lima <Gabriel.Lima@...>
Hi.
[#5364] Allowing *ary's in the middle of a camma separated list — "Akinori MUSHA" <knu@...>
Hi,
Hi,
At Tue, 10 Oct 2000 14:17:24 +0900,
[#5404] Object.foo, setters and so on — "Hal E. Fulton" <hal9000@...>
OK, here is what I think I know.
At Wed, 11 Oct 2000 11:37:25 +0900,
Hi,
Hi,
Hi,
Hi,
[#5425] Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...>
At Thu, 12 Oct 2000 03:49:46 +0900,
Thanks for the input.
At Thu, 12 Oct 2000 04:53:41 +0900,
At Thu, 12 Oct 2000 07:25:03 +0900,
oops, I didn't read this one before I went out for food..
At Thu, 12 Oct 2000 09:59:19 +0900,
[#5437] Editor recommandations? — "Chris Morris" <chrismo@...>
Any recommendations on editors for Ruby script on Windows?
[#5471] 2 ideas from Haskell — Mark Slagell <ms@...>
Do either of these interest anyone:
[#5479] Some newbye question — Davide Marchignoli <marchign@...>
I am reading the documentation I found about ruby but several points
[#5480] InstallShield version for Ruby soon... — andy@... (Andrew Hunt)
Okay folks,
[#5489] Regexp#matches — Aleksi Niemel<aleksi.niemela@...>
Would someone object aliasing matches for match in Regexp?
[#5505] Sorry, What is Ruby Book — Mansuriatus Shahrir Amir <chioque@...>
Sorry if this information is somewhere obvious. I just stumbled upon
[#5516] Re: Some newbye question — ts <decoux@...>
>>>>> "D" == Davide Marchignoli <marchign@di.unipi.it> writes:
Hi,
On Sat, 14 Oct 2000, Yukihiro Matsumoto wrote:
matz@zetabits.com (Yukihiro Matsumoto) writes:
Dave Thomas <Dave@thomases.com> wrote:
Hi,
> Proposal a and b have incompatibility. I'm not sure it's worth it.
>>>>> "Y" == Yukihiro Matsumoto <matz@zetabits.com> writes:
On Mon, 16 Oct 2000, ts wrote:
>>>>> "Y" == Yukihiro Matsumoto <matz@zetabits.com> writes:
[#5558] GC: malloc_memories — Mathieu Bouchard <matju@...>
Hi,
> |precipitate a new GC cycle if lots of resizing is done. My biggest
[#5570] Notes about GC — Mathieu Bouchard <matju@...>
[#5600] passing single or multiple strings. — Hugh Sasse Staff Elec Eng <hgs@...>
With multple assignments I can get nested arrays "shelled" (like peas)
In message "[ruby-talk:5600] passing single or multiple strings."
[#5603] debug command list in English — "Morris, Chris" <ChrisM@...>
I found this page which lists the interactive debugger commands ... anyone
[#5619] lint? — "Swit" <swit@...>
Is there something like lint for Ruby? I'd like to find NameErrors before
[#5705] Dynamic languages, SWOT ? — Hugh Sasse Staff Elec Eng <hgs@...>
There has been discussion on this list/group from time to time about
Hugh Sasse Staff Elec Eng wrote:
On Sat, 21 Oct 2000, Charles Hixson wrote:
[#5715] Help: sockets broken — jason petrone <jp@...>
I just compiled ruby 1.6.1 on an openbsd 2.6 machine(x86).
[#5716] Re: Array#insert — Aleksi Niemel<aleksi.niemela@...>
> From: jweirich@one.net [mailto:jweirich@one.net]
[#5727] String#slice surprise — "Guy N. Hurst" <gnhurst@...>
Hi,
Dave Thomas wrote:
[#5787] Shells and Ruby — "Dat Nguyen" <thucdat@...>
Hello all,
[#5850] Re: Array#insert rehashed — Aleksi Niemel<aleksi.niemela@...>
Dave asks for:
[#5862] succ but no pred? (& the MURKY award) — "Hal E. Fulton" <hal9000@...>
First of all, a serious question:
[#5873] Integer(String) weirdness for a ruby newbie — Stoned Elipot <Stoned.Elipot@...>
Hi,
[#5881] Q:what about "Programming Ruby"? — Gabriel Lima <Gabriel.Lima@...>
Hi to you all.
[#5882] [RFC] Towards a new synchronisation primitive — hipster <hipster@...4all.nl>
Hello fellow rubyists,
On Fri, 27 Oct 2000, hipster wrote:
[#5947] Hash.new {block} / Hash#default_proc{,_set} — "Brian F. Feldman" <green@...>
I've done very little testing, but I think I've successfully implemented the
[ruby-talk:5947] Hash.new {block} / Hash#default_proc{,_set}
I've done very little testing, but I think I've successfully implemented the
ability for a Hash to provide a default procedure rather than variable.
The only reasonable way I could think of doing this required on-the-fly
creation of a hash entry when a lookup fails -- otherwise, this feature is
nearly useless (does not make anything easier).
Here's the diff, my 3rd time modifying Ruby code itself. Comments?
--- ../ruby-1.6.2/hash.c Tue Sep 12 01:37:23 2000
+++ ./hash.c Sun Oct 29 22:43:48 2000
@@ -171,7 +171,7 @@
NEWOBJ(hash, struct RHash);
OBJSETUP(hash, klass, T_HASH);
- hash->ifnone = Qnil;
+ hash->ifnone_proc = hash->ifnone = Qnil;
hash->tbl = st_init_table(&objhash);
return (VALUE)hash;
@@ -201,10 +201,11 @@
VALUE *argv;
VALUE hash;
{
- VALUE ifnone;
+ VALUE ifnone, ifnone_proc;
- rb_scan_args(argc, argv, "01", &ifnone);
+ rb_scan_args(argc, argv, "01&", &ifnone, &ifnone_proc);
rb_hash_modify(hash);
+ RHASH(hash)->ifnone_proc = ifnone_proc;
RHASH(hash)->ifnone = ifnone;
return hash;
@@ -223,7 +224,7 @@
NEWOBJ(hash, struct RHash);
OBJSETUP(hash, klass, T_HASH);
- hash->ifnone = Qnil;
+ hash->ifnone_proc = hash->ifnone = Qnil;
hash->tbl = st_copy(RHASH(argv[0])->tbl);
return (VALUE)hash;
@@ -248,6 +249,7 @@
NEWOBJ(clone, struct RHash);
CLONESETUP(clone, hash);
+ clone->ifnone_proc = RHASH(hash)->ifnone_proc;
clone->ifnone = RHASH(hash)->ifnone;
clone->tbl = (st_table*)st_copy(RHASH(hash)->tbl);
@@ -284,6 +286,15 @@
return hash;
}
+static VALUE
+rb_hash_get_default(hash)
+ VALUE hash;
+{
+ if (RHASH(hash)->ifnone_proc != Qnil)
+ return rb_funcall(RHASH(hash)->ifnone_proc, rb_intern("call"), 0);
+ return RHASH(hash)->ifnone;
+}
+
VALUE
rb_hash_aref(hash, key)
VALUE hash, key;
@@ -291,7 +302,9 @@
VALUE val;
if (!st_lookup(RHASH(hash)->tbl, key, &val)) {
- return RHASH(hash)->ifnone;
+ if (RHASH(hash)->ifnone_proc != Qnil)
+ return rb_hash_aset(hash, key, rb_hash_get_default(hash));
+ return rb_hash_get_default(hash);
}
return val;
}
@@ -330,6 +343,13 @@
}
static VALUE
+rb_hash_default_proc(hash)
+ VALUE hash;
+{
+ return RHASH(hash)->ifnone_proc;
+}
+
+static VALUE
rb_hash_set_default(hash, ifnone)
VALUE hash, ifnone;
{
@@ -337,6 +357,14 @@
return hash;
}
+static VALUE
+rb_hash_set_default_proc(hash)
+ VALUE hash;
+{
+ RHASH(hash)->ifnone_proc = rb_f_lambda();
+ return hash;
+}
+
static int
index_i(key, value, args)
VALUE key, value;
@@ -356,7 +384,7 @@
VALUE args[2];
args[0] = value;
- args[1] = RHASH(hash)->ifnone;
+ args[1] = rb_hash_get_default(hash);
st_foreach(RHASH(hash)->tbl, index_i, args);
@@ -398,7 +426,7 @@
if (rb_block_given_p()) {
return rb_yield(key);
}
- return RHASH(hash)->ifnone;
+ return rb_hash_get_default(hash);
}
struct shift_var {
@@ -430,7 +458,8 @@
var.stop = 0;
st_foreach(RHASH(hash)->tbl, shift_i, &var);
- if (var.stop == 0) return RHASH(hash)->ifnone;
+ if (var.stop == 0)
+ return rb_hash_get_default(hash);
return rb_assoc_new(var.key, var.val);
}
@@ -1420,7 +1449,9 @@
rb_define_method(rb_cHash,"fetch", rb_hash_fetch, -1);
rb_define_method(rb_cHash,"[]=", rb_hash_aset, 2);
rb_define_method(rb_cHash,"store", rb_hash_aset, 2);
+ rb_define_method(rb_cHash,"default_proc", rb_hash_default_proc, 0);
rb_define_method(rb_cHash,"default", rb_hash_default, 0);
+ rb_define_method(rb_cHash,"default_proc_set", rb_hash_set_default_proc, 0);
rb_define_method(rb_cHash,"default=", rb_hash_set_default, 1);
rb_define_method(rb_cHash,"index", rb_hash_index, 1);
rb_define_method(rb_cHash,"indexes", rb_hash_indexes, -1);
--- ../ruby-1.6.2/ruby.h Mon Oct 16 01:04:05 2000
+++ ./ruby.h Sun Oct 29 21:54:05 2000
@@ -273,6 +273,7 @@
struct RBasic basic;
struct st_table *tbl;
int iter_lev;
+ VALUE ifnone_proc;
VALUE ifnone;
};
--
Brian Fundakowski Feldman \ FreeBSD: The Power to Serve! /
green@FreeBSD.org `------------------------------'