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 方法的调用和声明,如何向方法传递单个、多个、不确定个参数,以及方法的别名。