Какой метод вызывается при запуске URI ('http://google.com'))? - PullRequest
0 голосов
/ 27 июня 2019

Почти все вы использовали модуль URI для преобразования строки URL-адреса в объект, чтобы выполнить некоторую проверку или изменение.

Пример:

require 'uri'

URI('https://google.com')
# => #<URI::HTTPS https://google.com>

Как видите, результатом является объект HTTPS в модуле URI. Итак, возникает вопрос, что запускается, когда вы пишете имя модуля / класса с помощью круглых скобок, как в строке кода выше. Я думал, это неявный вызов метода call, но я получил NoMethodError.

Пример:

class MyClass
  def self.call
    puts 'You were right!'
  end
end

MyClass()
# => NoMethodError: undefined method `MyClass' for main:Object

1 Ответ

3 голосов
/ 27 июня 2019

Достаточно забавно, с кодом, который вы показали, MyClass.() работает (это псевдоним для .call).

Однако в случае URI это фактически метод (методы могут начинаться с заглавных букв). Вы можете увидеть исходный код здесь: https://apidock.com/ruby/Kernel/URI/instance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...