Ошибка при вызове self.puts в Ruby
Всем доброго дня!
Начал изучать ruby по книге Криса Пайна "Учись программировать". Так вот. Там есть вот такой пример:
iCantBelieveIMadeAVariableNameThisLongJustToPointToA3 = 3
puts iCantBelieveIMadeAVariableNameThisLongJustToPointToA3
self.puts iCantBelieveIMadeAVariableNameThisLongJustToPointToA3
который по словам автора должен вернуть:
3
3
Но в ответ на вызов self.puts я получаю:
3
ex3.rb:8:in '<main>': private method 'puts' called for main:Object <NoMethodError>
Кто-нибудь может по возможности максимально детально объяснить, почему такая конструкция не работает (а также почему работала ранее, если работала)? И почему работает такая:
iCantBelieveIMadeAVariableNameThisLongJustToPointToA3 = 3
puts iCantBelieveIMadeAVariableNameThisLongJustToPointToA3
self.send(:puts, iCantBelieveIMadeAVariableNameThisLongJustToPointToA3)
Заранее огромное вам спасибо!
Источник: Stack Overflow на русском