Ruby 方法

在 Ruby 中,方法(method)是执行特定任务的代码块,可以被重复调用。以下是对 Ruby 方法的中文讲解,涵盖定义、调用、参数、返回值等关键内容,力求简洁清晰。

1. 方法定义

Ruby 使用 def 关键字定义方法,end 结束定义。

# 语法
def 方法名(参数1, 参数2, ...)
  # 代码块
  返回值 # 可选,最后一行默认返回
end

# 示例
def say_hello
  puts "Hello, World!"
end

说明

  • 方法名通常用小写字母和下划线(如 say_hello)。
  • 方法的最后一行表达式会自动作为返回值,无需显式 return(但可以用)。

2. 调用方法

直接使用方法名调用,参数放在括号中(括号可省略)。

# 定义
def greet(name)
  "Hello, #{name}!"
end

# 调用
puts greet("Alice")  # 输出:Hello, Alice!
puts greet "Bob"     # 输出:Hello, Bob!(省略括号)

3. 参数

Ruby 方法支持多种参数类型:

  • 普通参数
  def add(a, b)
    a + b
  end
  puts add(2, 3)  # 输出:5
  • 默认参数:为参数设置默认值,调用时可省略。
  def greet(name = "Guest")
    "Hello, #{name}!"
  end
  puts greet       # 输出:Hello, Guest!
  puts greet("Alice")  # 输出:Hello, Alice!
  • 可变参数(*splat):接收任意数量的参数,存为数组。
  def sum(*numbers)
    numbers.sum
  end
  puts sum(1, 2, 3)  # 输出:6
  puts sum(10)        # 输出:10
  • 关键字参数:用键值对传递参数,顺序无关。
  def introduce(name:, age:)
    "I'm #{name}, #{age} years old."
  end
  puts introduce(name: "Alice", age: 25)  # 输出:I'm Alice, 25 years old.
  • 默认关键字参数
  def introduce(name: "Guest", age: 18)
    "I'm #{name}, #{age} years old."
  end
  puts introduce(age: 20)  # 输出:I'm Guest, 20 years old.

4. 返回值

  • Ruby 方法默认返回最后一行表达式的值。
  • 可使用 return 显式返回值,立即退出方法。
def square(num)
  return num * num  # 显式返回
  puts "这行不会执行"
end
puts square(4)  # 输出:16

5. 块与 yield

方法可以与块(block)一起使用,通过 yield 调用块。

def repeat(n)
  n.times { yield }
end
repeat(3) { puts "Hello!" }
# 输出:
# Hello!
# Hello!
# Hello!

说明yield 执行传入的块,块用 do...end{} 定义。

  • 检查块是否存在:用 block_given? 避免错误。
  def try_yield
    if block_given?
      yield
    else
      "No block given."
    end
  end
  puts try_yield { "Block!" }  # 输出:Block!
  puts try_yield               # 输出:No block given.

6. 方法作用域

  • 方法定义在类/模块中或顶层(全局可用)。
  • 方法默认是 public,可通过 privateprotected 限制访问。
class Person
  def public_method
    puts "This is public."
  end

  private
  def private_method
    puts "This is private."
  end
end

person = Person.new
person.public_method    # 输出:This is public.
# person.private_method # 错误:private method

7. 常见内置方法

Ruby 提供许多内置方法,如:

  • puts:打印输出,自动换行。
  • print:打印输出,不换行。
  • p:打印对象并返回,适合调试。
  • gets:获取用户输入。
p "Hello"  # 输出:"Hello"(带引号,调试用)

8. 方法别名与重定义

  • 别名:用 alias 为方法创建别名。
  def say
    "Hello"
  end
  alias say_hello say
  puts say_hello  # 输出:Hello
  • 重定义:可以重新定义已有方法(需谨慎)。
  class String
    def upcase
      "Custom: #{self}"
    end
  end
  puts "test".upcase  # 输出:Custom: test

9. 注意事项

  • 方法名后加 ? 表示返回布尔值(如 empty?)。
  • 方法名后加 ! 表示可能修改对象(如 upcase!)。
  • Ruby 方法灵活,优先简洁性和可读性。
  • 避免方法名与 Ruby 关键字冲突(如 class, def)。

如果你有具体问题或需要更详细的示例,请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注