From: Daniel Amelang Date: 2005-03-31T10:17:51+09:00 Subject: Re: New block syntax Hey David, I think that we've had some misunderstandings due to talking about different ruby versions. Some of the concerns that you've brought up are not a part of the proposed new hash syntax ([:], etc), but part of the new hash construct already in 1.9. I addressed one of those concerns in an email I sent to this list last week: http://ruby-talk.org/cgi-bin/scat.rb/ruby/ruby-core/4614 But I see another misunderstanding now. Forget the whole [hash] idea for the moment and let's just use the current 1.9 {key:value} syntax (with the {}, you notice). You're example: a = SomeClass.new b = 100 {a:'apple', b:'orange'} would give you {:a=>'apple', :b=>'orange'}. If you want the 'a' and 'b' to refer to the _objects_ that 'a' and 'b' refer to, not the symbols :a and :b, you can't use the ':' syntax, you have to fall back on the => syntax. That has been a part of 1.9 for a while now (AFAIK). >All of this just seems like so much upheaval to avoid the >(comparatively unusual [compared to hash literals, that is]) keyword >'lambda'. Actually, so far, your points have been against the {:} syntax, which has it's origins far before the whole no-lambda proc syntax idea. Just want to make sure that we're on the same page. Dan On Wed, 30 Mar 2005 22:04:52 +0900, David A. Black wrote: > Hi -- > > On Wed, 30 Mar 2005, Sean E. Russell wrote: > > > On Monday 21 March 2005 16:17, David A. Black wrote: > > > >> whitespace would be required before a symbol argument to a method, and > > > > Isn't it already? Whitespace, or a token character, is required before a > > symbol argument, AFAIK. Are you looking at a different version of Ruby than > > I am? > > Possibly. > > $ ruby -ve 'def x(y); p y; end; x:a' > ruby 1.8.2 (2004-12-25) [i686-linux] > :a > > (It may have changed in one or more 1.9's, but I'm treating it, like > all of this, as in flux and under discussion.) > > >> so on. So writing a Hash correctly would involved threading a much > >> narrower needle. > > > > Any reduction of typing does this, but that isn't an argument for having a > > terse syntax. > > I don't quite follow. > > > Ruby has always played it fast and loose. This syntax isn't > > more obfuscated; it is still clear what is being meant with: > > > > h = [ one: 'me', two: 'you', something: 'else' ] > > > > Well, at least, to me this seems pretty natural, and much easier to type than > > hashes defined with =>, and much clearer than hashes defined with ','. With > > long comma-separated hashes, it can be difficult to associate keys with > > values; this syntax is more clear. > > Except for the [] part :-) That's the thing: I'm really talking about > the {} constructor, and the implications of pressing [] into service > as a part-time hash literal. I don't feel strongly about the commas, > except that for tests it's nice to type h = { 1,2,3,4 }, since it's > fast. > > > David > > -- > David A. Black > dblack@wobblini.net > >