Ok, so I was comparing some stuff in my own DSL to Ruby. One construct they both support is this
x=["key" => "value"]
Knowing the difference between arrays and hashes, I would think this to be illegal, but the result in Ruby is
[{"key" => "value"}]
Why is this? And with this kinda syntax why can't you do
x=("key" => "value")
Why is an array a special case for implicitly created hashes?
With this apparent inconsistency in implicit hash creation, ruby achieves consistency in this regard:
can always be substituted with:
You can convert between argument lists and arrays, and therefore it is logical that they have the same syntax.
Another special case is in a function call, consider:
So in some contexts, Hashes can be built implicitly (by detecting the
=>
operator?). I suppose the answer is just that this was Matz's least-surprising behavior.I would say that the interpreter figures out that "key" => "value" is a hash, the same way it would figure out that 5 is a number when you put it into an array.
So if you write:
The interpreter is not going to think that it is a string, and return:
It seems that ruby implicitly creates hashes in some instances.