什么是带上下文的Ruby方法定义?
最近我遇到了一些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既是方法的名称,也可以是有效的上下文。”但是它
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