最近我遇到了一些看起来像这样的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既是方法的名称,也可以是它有效的上下文。”但是它似乎没有提供任何进一步的解释。
我的问题是:有人可以用上下文更好地解释这个方法定义,并给出一个如何使用它的例子吗?
答案 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