» Ruby快速入门 » 1. 基础篇 » 1.5 函数

函数

在Ruby中,函数使用 def 关键字进行定义。它们通常被称为方法,毕竟在Ruby中一切都是对象。

定义函数的基本语法:

def method_name(parameter1, parameter2, ...)
  # 函数体
  # 当函数被调用时执行的代码
end

以下是一个带有一个参数的基本方法:

def triple(x)
    x * 3
end

函数隐式返回最后一条语句的值。

你也可以使用显式返回:

def square(x)
   return x * x
end

大部分情况下,函数参数周围的括号通常是可选的。

a = square 5
puts a # => 25

可变参数

你可以使用星号操作符 (*) 定义接受可变数量参数的方法。 方法通过它接受任意数量的参数,并将这些参数收集到一个数组中。

def sum(*numbers)
  total = 0
  numbers.each { |num| total += num }
  total
end

# 使用不同数量的参数调用方法
result1 = sum(1, 2, 3)
result2 = sum(4, 5, 6, 7, 8)

puts result1  # => 6
puts result2  # => 30

多返回值

方法可以通过使用数组、哈希或特殊的 return 语法来返回多个值。

def multiple_values
  return 1, "hello", true
end

result_array = multiple_values
puts result_array.inspect  # => [1, "hello", true]


a, b, c = multiple_values
puts a, b, c
# 1
# hello
# true

yield

yield 关键字在方法内部用于调用传递给该方法的。它允许方法在其实现的特定锚点处执行一块代码。块可以接受参数,并在方法的上下文中执行。

def greet
  puts "Hello!"
  yield
  puts "Goodbye!"
end

greet do
  puts "Welcome to the Ruby world!"
end

# Hello!
# Welcome to the Ruby world!
# Goodbye!

函数体中可以有多个 yield

def whereareyou
   yield
   yield
   yield
end

whereareyou {puts "where are you?"}

# where are you?
# where are you?
# where are you?

你还可以使用 yield 向块传递参数:

def calculate
  x = 5
  y = 10
  result = yield(x, y)
  puts "Result: #{result}"  # => Result: 50
end

calculate do |a, b|
  a * b
end

代码挑战

编写一个名为 fizzbuzz 的 Ruby 函数,该函数以整数作为输入,并执行以下操作:

  • 如果数字可被3整除,则打印 "Fizz"。
  • 如果数字可被5整除,则打印 "Buzz"。
  • 如果数字同时可被3和5整除,则打印 "FizzBuzz"。
  • 如果上述条件均不适用,则打印数字本身。
Loading...
> 此处输出代码运行结果
上页
下页