如何在Ruby的一行中定义一个方法?


92

def greet; puts "hello"; end在Ruby的一行上定义方法的唯一方法是吗?


11
从答案中可以看出,可以在一行上以不同的方式定义方法,但是问题是,应该吗?出于维护和可读性的考虑,任何定义都应以清晰明了的方式编写,因此,如果单行变得笨拙或混乱,则将其散布开来。某些语言似乎鼓励简洁的编码方式作为学习代码的一种方式,但是Ruby编码风格则鼓励简洁性之外的优雅,可读性和可维护性。完成前三个,我们将向您鞠躬。
Tin Man

Answers:


102

如果使用括号,则可以避免使用分号:

def hello() :hello end

1
这比使用分号要长...?
Apollys

73

只需给出完整的新鲜答案即可:

通常避免使用单行方法。尽管它们在野外有些受欢迎,但是由于它们的定义语法有一些特殊性,因此它们的使用不受欢迎。无论如何- 单行方法中最多只能 有一个表达式

# bad
def too_much; something; something_else; end

# okish - notice that the first ; is required
def no_braces_method; body end

# okish - notice that the second ; is optional
def no_braces_method; body; end

# okish - valid syntax, but no ; make it kind of hard to read
def some_method() body end

# good
def some_method
  body
end

空规则是该规则的一个例外。

# good
def no_op; end

bbatsov / ruby​​-style-guide


39
def add a,b; a+b end

分号是Ruby的内联语句终止符

或者您可以使用该define_method方法。(编辑:在Ruby 1.9中已弃用)

define_method(:add) {|a,b| a+b }

4
似乎在Ruby 2+中不被弃用
michau 2015年


8

另一种方式:

def greet() return 'Hello' end

12
在Ruby中,方法的返回值是最后一条语句返回的值。您不需要在return这里,因为它不是保护条款。
达米安

1
Upvoted因为,虽然是不是需要,则return可以对那些精通较少(或熟悉的)的Ruby添加可读性。这是YMMV的事情之一...
Potherca
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.