La classe richiedente & # 8220; richiede "mad_skills" & # 8221; o & # 8220; includi "mad_skills" & # 8221 ;?

StackOverflow https://stackoverflow.com/questions/1406123

  •  05-07-2019
  •  | 
  •  

Domanda

Inoltre, che cosa " self.send attr " fare? attr è considerato una variabile di istanza privata della classe ActiveEngineer? Ci sono altri problemi con questo codice in termini di logica Ruby?

class Applicant < ActiveEngineer

  require 'ruby'
  require 'mad_skills'
  require 'oo_design'
  require 'mysql'

  validates :bachelors_degree

  def qualified?
    [:smart, :highly_productive, :curious, :driven, :team_player ].all? do
|attr|
      self.send attr
    end
  end
end

class Employer
  include TopTalent
  has_millions :subscribers, :include=>:mostly_women
  has_many :profits, :revenue
  has_many :recent_press, :through=>[:today_show, :good_morning_america,
                                     :new_york_times, :oprah_magazine]
  belongs_to :south_park_sf
  has_many :employees, :limit=>10

  def apply(you)
    unless you.build_successful_startups
      raise "Not wanted"
    end
    unless you.enjoy_working_at_scale
      raise "Don't bother"
    end
  end

  def work
    with small_team do
      our_offerings.extend you
      subscribers.send :thrill
      [:scaling, :recommendation_engines, :   ].each do |challenge|
        assert intellectual_challenges.include? challenge
      end
      %w(analytics ui collaborative_filtering scraping).each{|task|
task.build }
    end
  end

end

def to_apply
  include CoverLetter
  include Resume
end
È stato utile?

Soluzione

richiede 'mad_skills' carica il codice in mad_skills.rb (oppure carica mad_skills.so/.dll a seconda di quale esiste). È necessario richiedere un file prima di poter utilizzare le classi, i metodi ecc. Definiti in quel file (anche se nei binari i file vengono caricati automaticamente quando si tenta di accedere a classi con lo stesso nome del file). Inserendo il requisito all'interno di una definizione di classe, non cambia affatto il suo comportamento (vale a dire metterlo in cima al file non farebbe differenza).

include MadSkills prende il modulo MadSkills e lo include nella catena di ereditarietà di Richiedente , ovvero rende tutti i metodi in MadSkills disponibile per le istanze di Richiedente .

self.send attr esegue il metodo con il nome specificato in attr su self e restituisce il valore restituito. Per esempio. attr = " hello " ;; self.send (attr) sarà uguale a self.hello . In questo caso esegue i metodi smart , altamente_produttivo , curioso , driven e team_player e verifica che tutti restituiscano true.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top