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

时间:2011-11-08 17:11:39

标签: ruby syntax methods

最近我遇到了一些看起来像这样的Ruby代码:

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

我之前从未见过def语法。

在Pickaxe书中,方法定义如下:

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

并且它声明“defname既是方法的名称,也可以是它有效的上下文。”但是它似乎没有提供任何进一步的解释。

我的问题是:有人可以用上下文更好地解释这个方法定义,并给出一个如何使用它的例子吗?

2 个答案:

答案 0 :(得分:3)

代码示例定义了module中的一个类。该类有一个名为hire_an_employee的方法,采用单个参数business。除非你指的是缺少的括号,否则方法定义本身并没有什么异常。

Parens在定义方法时是可选的(并调用一个方法,除非需要消除歧义)。

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

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

> Foo.ohai
kthxbai
> Foo.new.ohai
NoMethodError: undefined method 'ohai' ...

答案 1 :(得分:0)

假设:

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:你可以省略parens。

def foo(a)
  #do stuff
end

与:

相同
def foo a
  #do stuff
end