Я наткнулся на этот код, который о Dropbox - PullRequest
0 голосов
/ 05 марта 2019

Кто-нибудь может объяснить def self.extended (base) , что это значит здесь или какая-либо идея?

module Paperclip
  module Storage
    module Dropbox
      def self.extended(base)
        base.instance_eval do
          @options[:dropbox_options] ||= {}
          @options[:path] = nil if @options[:path] == 
          self.class.default_options[:path]
          @options[:dropbox_visibility] ||= "public"
          @path_generator = PathGenerator.new(self, @options)
          #dropbox_client # Force creation of dropbox_client
        end
      end
    end
  end
end

1 Ответ

0 голосов
/ 05 марта 2019

Метод self.extended вызывается при расширении модуля.Это позволяет выполнять методы в контексте базы (где модуль расширяется).

Вы можете попробовать это сами и понять это с помощью простого примера кода.Просто вставьте файл ruby ​​и запустите его.

Пример для self.extended

module A
  def self.extended(base)
    puts "#{self} extended in #{base}"
  end 
end

class Apple
  extend A
end

# This should print: "A extended in Apple"

Пример для self.included

module A
  def self.included(base)
    puts "#{self} included in #{base}"
  end 
end

class Apple
  include A
end

# This should print: "A included in Apple"

Подробнее вы можете прочитать здесь: http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/

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