章节索引 :

Ruby 的方法

Ruby 提供了一种组织代码并重用的功能,它可以让我们无需创建冗长的 Ruby 代码,在需要它们的时候才会使用它们。对于方法,您只需要学会方法的声明、调用以及传参即可。在本章中会为您详细介绍方法的使用。

1. 声明和调用Ruby方法

在 Ruby 中,我们使用def来声明定义方法,def后面接加方法名,end作为方法的结尾。另外,我们使用方法名()的形式来调用方法,在大多数情况下,我们还可以省略这个括号。

让我们编写一个简单的返回字符串的方法,然后调用这个方法。

实例:

def sayGoodnight
  result = "Goodnight"
  return result
end
# 该睡觉了~
puts sayGoodnight() # puts sayGoodnight 和此方法等效

# ---- 输出结果 ----
Goodnight

解释: 我们在上述代码定义了一个sayGoodnight的方法,这个方法会返回一个字符串名叫“Goodnight”,sayGoodnight()调用了这个方法,然后我们又调用了puts方法,它会将结果打印出来,最后显示的结果为GoodNight。

Ruby 的方法默认将最后一行作为返回值,所以我们甚至可以省略return

实例:

def sayGoodnight
  "Goodnight"
end
puts sayGoodnight

# ---- 输出结果 ----
Goodnight

解释:sayGoodnight 方法里面的最后一行字符串作为此方法的返回值输出出来。

2. 将参数传递给方法

2.1 一个参数的时候

让我们来改进一下这个方法,可以传递一个名为name的参数。

实例:

def sayGoodnight(name)
  result = "Goodnight, " + name
  return result
end
# 该睡觉了~
puts sayGoodnight("John-Boy")

# ---- 输出结果 ----
Goodnight, John-Boy

解释: 我们在上个例子调整了sayGoodnight方法,使他可以传递一个参数name并打印出来,调用sayGoodnight这个方法的同时传递了一个字符串参数"John-Boy"。最后打印出来内容为:Goodnight,John-Boy。

注意事项: 在第 6 行 ,puts sayGoodnight("John-Boy")包含两个方法调用,一个是sayGoodnight,另一个是puts 。 为什么一个方法调用在参数用括号括起来,而另一个没有使用括号?这种情况,纯粹是个人习惯问题。如果您过多省略括号,由于优先级的问题会让您很难知道哪个参数与哪个方法调用一起使用,因此,除了最简单的情况外,我们建议在所有情况下都使用括号。

以下几行都是等效的。

实例:

puts sayGoodnight "John-Boy" 
puts sayGoodnight("John-Boy") # 最推荐的写法
puts(sayGoodnight "John-Boy") 
puts(sayGoodnight("John-Boy"))

2.2 多个参数的时候

需要传递多个参数的时候参数名用逗号分隔开

实例:

def sayGoodnight(name1, name2)
  result = "Goodnight, " + name1 + ', ' + name2
  return result
end

puts sayGoodnight("John-Boy", "Alice-Girl")

# ---- 输出结果 ----
Goodnight, John-Boy, Alice-Girl

Tips:Ruby方法返回的值是最后一个求值表达式的值,因此我们可以完全省略return

实例:

def sayGoodnight(name1, name2)
  "Goodnight, " + name1 + ', ' + name2 # 方法的最后一行即为返回值
end

puts sayGoodnight("John-Boy", "Alice-Girl")

# ---- 输出结果 ----
Goodnight, John-Boy, Alice-Girl

2.3 不确定参数个数的时候

当我们不确定参数的个数的时候,可以在参数前头加上*来解决这个问题,这个参数会转化成为一个数组Array)。

实例:

def sayGoodnight(*names)
  result = "Goodnight"
  names.each do |name|
     result += ', ' + name 
  end
  result # 返回值可以省略return
end

puts sayGoodnight("Andrew")
puts sayGoodnight("John-Boy", "Alice-Girl")

# ---- 输出结果 ----
Goodnight, Andrew
Goodnight, John-Boy, Alice-Girl

3. 方法的别名

Ruby 允许对方法进行别名,从而创建具有不同名称的方法的副本(尽管使用任何一个名称调用该方法最终都会调用同一对象)。创建别名使用alias方法。

实例:

def multiply(val1, val2 )
  result = val1 * val2
  return result
end
alias docalc multiply
puts docalc( 10, 20 )
puts multiply( 10, 20 )

# ---- 输出结果 ----
200
200

4. 小结

本章节我们学习了 Ruby 方法的调用和声明,如何向方法传递单个、多个、不确定个参数,以及方法的别名。