Отвечая на другой вопрос, я понял, что следующая программа делает не совсем то, что я думал.
puts "test"
self.puts "test" # => private method `puts' called for main:Object (NoMethodError)
Это исключение удивляет меня, так как я всегда думал, что вызовы методов верхнего уровня будут разрешены экземпляром объекта main
, но это, похоже, не так.
Кто фактический получатель первый вызов и как он разрешается? Является ли это специальным правилом, которое применяется только к вызовам методов в области верхнего уровня?