Quick ruby quiz.. after these two lines execute, what is the value of number?
>> number = 5
>> (1..10).each {|number| print number}
Well, number will be 10, thanks to the block being run and re-assigning the value of number. This can cause you some pretty subtle bugs if you happen to have the same name for a local/function argument, and as a variable name in a block.
In C#, the compiler is kind enough to tell you that this would be a very bad idea and give you an error.
And thanks to Sudhinda for commenting – this has been fixed in Ruby 1.9. In 1.9, the variable used as the argument in the block does not affect the variable outside the block.