Hi gurus and nubys,

Again here to bother you :)

Please note that I'm not here to start a flame. I actually want to
understand matz' and dev/core choices, please excuse me if I sound
rude.


This is the supposed behaviour for kwd args:
---
def f(a,b: 2 , **kwd)
 p [a,b,kwd]
end

f(1) #=> [1,2,{}]
f(1,b:5) #=>[1,5,{}]
f(1,b:5,c:6) #=>[1,5,{:c=>6}]

---

I wonder:
why we introduce the ':' syntax ?

Why can't we call a kwd arg like 
f(1,b=5)

?

I suppose this is to avoid conflicts with normal assignment..
but what's wrong with making go away the assignment in method calling?
?

OTOH, why we have to define kwd args with
 f(a,b:2)

instead of 
 f(a,b=10)

?

if f(a,b:10) cames in default argument with '=' actually become
useless?

I suppose matz refused the current keyword args syntax as it is found
in python.
 I just wonder why :)

(maybe just because we don't have a () operator?)


PS
btw the 'a: c' syntax for hash is really cool. 

I always hate to type 'a'=>b or :a=>b.


PPS
I'd love to see : and => unified as 

'a=>b is the same that a: b and it works like
hash[a]=b if var a is defined or like hash[:a]=b if a is not already
defined'

but I'm just dreaming,remeber:
when *you* will write *your* language you'll follow *your* POLS.

Too bad matz' logic is so obvious to me most of the time, this keeps
me away from writing MyLang ;)




PPPS
literals, and method argument definition, are actually embedded micro
languages.
It seem normal to me that '{a=>b}' could work differently from 'a = b'
(i.e. look if the var exist and act differently).

Nobody expects a string literal or a regexp literal to work like the
rest of the code.

 But we expect this from Arrays and Hashes (and somewy Ranges).
This must mean something.
Possibly that I need more coffe in the morning.