зачем создавать метод класса в ruby? - PullRequest
0 голосов
/ 27 марта 2020

В чем заключается идея создания нового экземпляра метода внутри конструкции class << self? Я понимаю, что методы помещаются в блок class << self, чтобы сделать их методами класса, но что это значит для создания нового экземпляра самого метода?

class foo
  class << self
     def bar(param)
       new.bar(some_param)
     end
  end
end

1 Ответ

0 голосов
/ 27 марта 2020

Я думаю, что вы пытаетесь описать метод удобства:

class FooService
  def initialize
    @bar= Bar.new
  end

  # this does the actual work
  def call
    results = @bar.do_some_work
    results.each do
       # ...
    end 
  end

  # this is just a convenient wrapper
  def self.call
    new.call
  end
end

Это позволяет вам вызывать метод класса FooService.call вместо того, чтобы вручную создавать экземпляр класса с помощью FooService.new.call. На самом деле он не очень похож на этот простой пример, но он действительно полезен для абстрагирования инициализации объектов в таких вещах, как служебные объекты, или для объединения аргументов инициализатора с аргументами метода.

class ApiClient
  def initialize(api_key)
    @api_key = api_key
  end


  def get(path)
    # ...
  end

  def self.get(path, api_key: ENV['API_KEY'])
    new(api_key).call(path)
  end
end

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