что выполняет функция def внутри блоков? - PullRequest
2 голосов
/ 12 марта 2012

Я довольно новичок в Ruby, но я наткнулся на эту странную сущность, когда код определения функции написан внутри кода do-block.Какова цель этого:

 module Hi
   def self.included(base)
     base.class_eval do
       def hello; puts 'Hello' end
     end
    end
 end

Я уверен, что сначала я должен получить свои концепции Mixin прямо, прежде чем двигаться вперед (и я в процессе погружения глубже в mixin и прочее), но путьdef: привет используется внутри do-блока, сбивает меня с толку

1 Ответ

3 голосов
/ 12 марта 2012

То, что делает этот конкретный бит кода, определяет метод (hello) в любом классе, include s этого модуля. Учитывая это, следующие два бита кода (примерно) эквивалентны:

class Foo
  include Hi
end

# ...is equivalent to...

class Foo
  def hello
    puts 'Hello'
  end
end

Вы найдете документацию для Module#class_eval и Module.included информативным.

...