什么是带上下文的Ruby方法定义?

什么是带上下文的Ruby方法定义?,ruby,syntax,methods,Ruby,Syntax,Methods,最近我遇到了一些Ruby代码,如下所示: module SomeModule class SomeClass def hire_an_employee business # do stuff end end end 我以前从未见过def语法 在鹤嘴锄手册中,方法定义如下: def defname⟨(⟨,arg⟨,=val⟩⟩∗ ⟨,&blockarg⟩) ⟩ body end 它声明“defname既是方法的名称,也可以是有效的上下文。”但是它

最近我遇到了一些Ruby代码,如下所示:

module SomeModule
  class SomeClass
    def hire_an_employee business
      # do stuff
    end
  end
end
我以前从未见过def语法

在鹤嘴锄手册中,方法定义如下:

def defname⟨(⟨,arg⟨,=val⟩⟩∗ ⟨,&blockarg⟩) ⟩
  body
end
它声明“defname既是方法的名称,也可以是有效的上下文。”但是它似乎没有提供任何进一步的解释


我的问题是:有人能用上下文更好地解释这个方法定义,并举例说明如何使用它吗

代码示例定义了一个类中的类。该类有一个名为
hire\u anu employee
的方法,使用一个参数
business
。方法定义本身没有什么不寻常的地方,除非您指的是缺少的括号

在定义方法(并调用方法,除非需要消除歧义)时,参数是可选的

“上下文”部分意味着
defname
可以包括一个上下文,如
self
,以定义一个类(而不是实例)方法

鉴于:

使用“雇用员工”功能

k = SomeModule::SomeClass.new
k.hire_an_employee "woot"
附言:你可以省略括号

def foo(a)
  #do stuff
end
同:

def foo a
  #do stuff
end

啊,谢谢!我不知道括号对于参数是可选的。比如我的例子,我认为业务是一个上下文,并试图找出它的语义。我认识很多Ruby开发人员,如果你在一个包含任何超过零个参数的方法的定义中省略paren,他们会觉得你很有趣。在语法上考虑它们是可选的,但通常是强制性的。BrianWong是的,我想知道这是否会让你感到厌烦——我应该明确地说些什么。@sheldonh大多数开发人员都觉得我很有趣,不管语言如何。
def foo(a)
  #do stuff
end
def foo a
  #do stuff
end