Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中如何在一行上定义一个方法?_Ruby - Fatal编程技术网

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

在Ruby中如何在一行上定义一个方法?,ruby,Ruby,是def;放“你好”;end在Ruby中在一行上定义方法的唯一方法是什么 def add a,b; a+b end 分号是Ruby的内联语句终止符 或者您可以使用define\u方法方法。(编辑:这个在ruby 1.9中已被弃用) 另一种方式: define_method(:greet) { puts 'hello' } def greet() return 'Hello' end 如果在定义方法时不想为其输入新的作用域,则可以使用。如果使用括号,则可以避免使用分号: def hello(

def;放“你好”;end
在Ruby中在一行上定义方法的唯一方法是什么

def add a,b; a+b end
分号是Ruby的内联语句终止符

或者您可以使用
define\u方法
方法。(编辑:这个在ruby 1.9中已被弃用)

另一种方式:

define_method(:greet) { puts 'hello' }
def greet() return 'Hello' end

如果在定义方法时不想为其输入新的作用域,则可以使用。如果使用括号,则可以避免使用分号:

def hello() :hello end
还有另一种方式:

define_method(:greet) { puts 'hello' }
def greet() return 'Hello' end

只要给出一个全新的答案:

一般避免单线法。虽然它们在野外有点流行,但它们的定义语法有一些特殊性,这使得它们的使用不受欢迎。无论如何,应该有 单行方法中只能有一个表达式

#坏
定义太多;某物其他的东西;结束
#okish-注意第一个;是必需的
def无大括号法;体端
#okish-注意第二个;是可选的
def无大括号法;身体;结束
#okish-有效语法,但没有;让它变得难以阅读
def some_method()主体结束
#好
定义某些方法
身体
结束
该规则的一个例外是空体方法

#很好
def no_op;结束
对于只包含一条语句的方法,请参见.Ruby 3.0.0:

def greet = puts("hello")
请注意,单语句限制意味着此不能写为:

# NOT ALLOWED
def greet = puts "hello"

SyntaxError: unexpected string literal, expecting `do' or '{' or '('
def greet = puts "hello"
                 ^

这一变化似乎是为了适应这样一个现实,即它们很常见,但很难理解——。

从答案中可以看出,可以在一行上定义不同的方法,但问题是,你应该这样做吗?出于维护和可读性的考虑,任何定义都应该以清晰明了的方式编写,因此,如果单行变得笨拙或混乱,那么就将其展开。有些语言似乎鼓励简练的编码作为学习代码的一种方式,但Ruby编码风格鼓励优雅、可读性和可维护性,而不是学习性。完成前三个步骤,我们将向您鞠躬。NoMethodError:Ruby 1.9.3中为Object:Class调用的私有方法“define\u method”
define\u method
已在Ruby 1.9中“私有化”,在Ruby中,方法的返回值是最后一条语句返回的值。这里不需要
return
,因为它不是一个保护子句。这是因为,尽管不需要
return
,但它可以为那些不太熟悉Ruby的人增加可读性。这是其中之一…在Ruby 2+中似乎没有被弃用,这比使用分号要长…?@ApollySupportsMonica如果你读了他的问题,他已经使用了分号,所以他显然想要另一种方法:)