[#13775] Problems with racc rule definitions — Michael Neumann <neumann@...>

15 messages 2001/04/17
[#13795] Re: Problems with racc rule definitions — Minero Aoki <aamine@...> 2001/04/18

Hi,

[#13940] From Guido, with love... — Dave Thomas <Dave@...>

52 messages 2001/04/20

[#13953] regexp — James Ponder <james@...>

Hi, I'm new to ruby and am coming from a perl background - therefore I

19 messages 2001/04/21

[#14033] Distributed Ruby and heterogeneous networks — harryo@... (Harry Ohlsen)

I wrote my first small distributed application yesterday and it worked

15 messages 2001/04/22

[#14040] RCR: getClassFromString method — ptkwt@...1.aracnet.com (Phil Tomson)

It would be nice to have a function that returns a class type given a

20 messages 2001/04/22

[#14130] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Guy N. Hurst wrote:

21 messages 2001/04/24
[#14148] Re: Ruby mascot proposal — Stephen White <spwhite@...> 2001/04/24

On Tue, 24 Apr 2001, Conrad Schneiker wrote:

[#14188] Re: Ruby mascot proposal — matz@... (Yukihiro Matsumoto) 2001/04/25

Hi,

[#14193] Re: Ruby mascot proposal — "W. Kent Starr" <elderburn@...> 2001/04/25

On Tuesday 24 April 2001 23:02, Yukihiro Matsumoto wrote:

[#14138] Re: python on the smalltalk VM — Conrad Schneiker <schneik@...>

FYI: Thought this might be of interest to the JRuby and Ruby/GUI folks.

27 messages 2001/04/24
[#14153] Re: python on the smalltalk VM — Andrew Kuchling <akuchlin@...> 2001/04/24

Conrad Schneiker <schneik@austin.ibm.com> writes:

[#14154] array#flatten! question — Jim Freeze <jim@...> 2001/04/24

Hello.

[#14159] Can I insert into an array — Jim Freeze <jim@...> 2001/04/24

Ok, this may be a dumb question, but, is it possible to insert into an

[#14162] Re: Can I insert into an array — Dave Thomas <Dave@...> 2001/04/24

Jim Freeze <jim@freeze.org> writes:

[#14289] RCR: Array#insert — Shugo Maeda <shugo@...> 2001/04/27

At Wed, 25 Apr 2001 01:28:36 +0900,

[#14221] An or in an if. — Tim Pettman <tjp@...>

Hi there,

18 messages 2001/04/25

[#14267] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Danny van Bruggen,

16 messages 2001/04/26

[#14452] How to do it the Ruby-way 3 — Stefan Matthias Aust <sma@3plus4.de>

First a question: Why is

21 messages 2001/04/30

[ruby-talk:13425] Re: Multidimensional arrays and hashes?

From: "Christoph Rippel" <crippel@...>
Date: 2001-04-02 00:54:49 UTC
List: ruby-talk #13425
> From: nosuzuki@e-mail.ne.jp [mailto:nosuzuki@e-mail.ne.jp]On Behalf Of
[...]
> You only type less if you're doing it this way *once*.  If your
> program is filled with things like this ...
> 
>   h = {'a'=>{'b'=>{'c'=>'xxx'}}}
> 
> .. you end up typing a lot more than if you instantiate one `HashMD'
> object and then use lots of constructs like this:
> 
>   h['a']['b']['c'] = 'xxx'
> 
> However, in my opinion, saving a few keystrokes isn't very important
> at all.  To me, the advantage of the latter form is that it's much
> easier to read, understand, and maintain.

I guess that's a matter of taste (I was sort of wandering if 
h['a']['b']['c'] = 'xxx' should result 
{'c'=>{'b'=>{'a'=>'xxx'}}} or {{{'a'=>'b'} => 'c'}=>'xxx'} etc. ) 


> 
> Also, to me, a good idea would be to have some sort of mixin that can
> be included in Hash that can add a `get' and `set' method that look
> something like this:
> 
>   h.get('a','b','c')
> 
>   h.set('a','b','c','xxx')
> 
> The `get' method would return nil (or perhaps throw an exception) if a
> non-existent node is being referenced; and the `set' method would
> create the internal structure as needed.

but I agree that you probably want a short cut if you really use
this very often - I guess you want (you could use inject for this)
something like 

---------
module MultiHash
def lset! (*parms)
	raise TypeError.new 'lset - not enough parameters' if (nl = parms.length - 2)< 0
	tmp = self  
	for i in 0...nl do
		if (minitmp=  tmp[parms[i]]).kind_of? Hash 
				(tmp = minitmp)
			else
				minitmp= parms.last 
				nl.downto(i+1) { |j| minitmp={parms[j] => minitmp} }
				tmp[parms[i]] = minitmp
			return self
		end
		end
		if  (tmp.key? parms[nl]) && (parms.last == tmp[parms[nl]])
			return nil 	
	else
	tmp[parms[nl]] = parms.last	
		return self
	end
end
end


class Hash
include MultiHash
end

h ={}
p  h.lset!('a','b','c','x')
p  h.lset!('a','b','c','x')
p  h.lset!('a','b','C','x')
p  h.lset!('a','B','c','x')


Christoph



In This Thread