Должен ли класс кандидата «требовать« mad_skills »» или «включать« mad_skills »»? - PullRequest
0 голосов
/ 10 сентября 2009

Кроме того, что делает "self.send attr"? Предполагается ли attr частной переменной экземпляра класса ActiveEngineer? Есть ли другие проблемы с этим кодом с точки зрения логики 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

1 Ответ

3 голосов
/ 10 сентября 2009

require 'mad_skills' загружает код в mad_skills.rb (или загружает mad_skills.so/.dll в зависимости от того, какой существует). Вам нужен файл, прежде чем вы сможете использовать классы, методы и т. Д., Определенные в этом файле (хотя в rails файлы автоматически загружаются при попытке получить доступ к классам, имя которых совпадает с именем файла). Помещение require внутри определения класса вообще не меняет его поведение (то есть размещение его в верхней части файла не будет иметь значения).

include MadSkills берет модуль MadSkills и включает его в цепочку наследования Applicant, то есть он делает все методы в MadSkills доступными для экземпляров Applicant.

self.send attr выполняет метод с именем, указанным в attr для self, и возвращает его возвращаемое значение. Например. attr = "hello"; self.send(attr) будет таким же, как self.hello. В этом случае он выполняет методы smart, highly_productive, curious, driven и team_player и проверяет, что все они возвращают true.

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