Что такое определение метода Ruby с контекстом? - PullRequest
2 голосов
/ 08 ноября 2011

Недавно я наткнулся на код Ruby, который выглядит следующим образом:

module SomeModule
  class SomeClass
    def hire_an_employee business
      # do stuff
    end
  end
end

Я никогда раньше не видел этот синтаксис def.

В книге Кирка определение метода выглядит следующим образом:

def defname⟨(⟨,arg⟨,=val⟩⟩∗ ⟨,&blockarg⟩) ⟩
  body
end

и говорится, что «defname - это и имя метода, и, необязательно, контекст, в котором он действителен». Однако, похоже, нет более подробного объяснения.

Мой вопрос таков: может ли кто-нибудь дать более точное объяснение этого определения метода с помощью контекста и привести пример его использования?

Ответы [ 2 ]

3 голосов
/ 08 ноября 2011

Пример кода определяет класс в модуле . В классе есть единственный метод с именем hire_an_employee, который принимает один параметр business. В самом определении метода нет ничего необычного, если только вы не ссылаетесь на отсутствующие скобки.

Парень не обязателен при определении метода (и при его вызове, если не требуется устранения неоднозначности).

Часть "context" означает, что defname может включать контекст, такой как self, для определения метода класса (в отличие от экземпляра).

class Foo
  def self.ohai
    p "kthxbai"
  end
end

> Foo.ohai
kthxbai
> Foo.new.ohai
NoMethodError: undefined method 'ohai' ...
0 голосов
/ 08 ноября 2011

Дано:

module SomeModule
  class SomeClass
    def hire_an_employee business
      # do stuff
  end
end

Для использования функции hire_an_employee

k = SomeModule::SomeClass.new
k.hire_an_employee "woot"

Ps: Вы можете опустить парены.

def foo(a)
  #do stuff
end

совпадает с:

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