On Tuesday, 23 September 2014 at 19:04:55 UTC, Marco Leise wrote:
Of course, butvoid foo(int x) { int y; } appears to the uninitiated as two variables that will only be visible inside of foo. The notion of a sourrounding parameter scope only comes up when you dig deep into the language. It is almost safe to say, without reading the specs or the compiler source one wouldn't know. (I didn't :) )
It is obvious when you think about it. Consider contract for instance.
Now that I understand that the parameter scope exists I understand how the lookup happens. I could say the same about the famous JavaScript WAT video. Once you understand all the language rules it becomes sane. That is exactly what a WAT is about: It is a logical consequence of some hidden context inside the language that yields totally unexpected results in innocent looking code.
Yes, there is obviously a reason. Nobody explicitly decided that these construct would yield completely idiotic results. But they do.
