Глобальная область видимости Ruby

Отвечая на другой вопрос, я понял, что следующая программа делает не совсем то, что я думал.

puts "test"
self.puts "test"  # => private method `puts' called for main:Object (NoMethodError)

Это исключение удивляет меня, так как я всегда думал, что вызовы методов верхнего уровня будут разрешены экземпляром объекта main, но это, похоже, не так.

Кто фактический получатель первый вызов и как он разрешается? Является ли это специальным правилом, которое применяется только к вызовам методов в области верхнего уровня?

6
задан Niklas B. 28 March 2012 в 16:24
поделиться