Pergunta

Além disso, o que significa "self.send attr" fazer? É attr assumido ser uma variável de instância privada da classe ActiveEngineer? Existem outros problemas com este código em termos de lógica 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
Foi útil?

Solução

cargas require 'mad_skills' o código em mad_skills.rb (ou cargas mad_skills.so/.dll dependendo de qual existe uma). Você precisa exigir um arquivo antes de ser capaz de usar as classes, métodos etc. definidos nesse arquivo (embora em trilhos arquivos são carregados automaticamente quando tentar classes de acesso que têm o mesmo nome do arquivo). Colocando exigem dentro de uma definição de classe, não muda o seu comportamento em tudo (ou seja, colocá-lo no topo do arquivo não faria uma diferença).

include MadSkills leva a MadSkills módulo e inclui-lo em cadeia herança de Applicant, isto é, faz com que todos os métodos em MadSkills disponível para casos de Applicant.

self.send attr executa o método com o nome especificado no attr na auto e retorna seu valor de retorno. Por exemplo. attr = "hello"; self.send(attr) vai ser o mesmo que self.hello. Neste caso, ele executa a métodos smart, highly_productive, curious, driven e team_player e verifica se todos eles retornar true.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top