Ruby 方法

Ruby中的方法是一组按顺序组合在一起以执行特定任务的指令。

下面是一个简单的方法示例。您可以阅读其余教程以了解更多信息。

示例

# Define a method named 'greet'
def greet
  puts "Hello"
end

# Call the method
greet

# Output: Hello

这里,greet是一个方法,调用时会打印"Hello"


定义方法

要在Ruby中创建方法,请使用def关键字,后跟方法名称。

def method_name
  # Code to run
end

然后,您可以在代码稍后使用方法名来调用该方法

# Call the method to execute it
method_name

示例

让我们创建一个名为say_goodbye的方法,并调用它来执行。

def say_goodbye
  puts "Goodbye!"
end

# Call the method
say_goodbye

# Output: Goodbye!

在这里,我们创建了一个名为say_goodbye的方法,它会显示一条消息。该方法仅在我们稍后在程序中调用它时执行。

下图展示了方法的定义方式。

Method Definition
方法定义

方法参数

方法可以接受输入,称为参数,以根据不同值执行任务。

def method_name(parameter)
  # Use the parameter
end

示例:方法参数

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

greet("Alice")
greet("Ruby")

输出

Hello, Alice!
Hello, Ruby!

这里,greet方法接受一个参数name。然后,我们通过将"Alice""Ruby"作为值传递给参数来调用该方法。

此程序的工作原理如下:

调用方法 参数值 方法输出
greet("Alice") "Alice" 你好,Alice!
greet("Ruby") "Ruby" 你好,Ruby!

默认参数

在Ruby中,默认参数允许您为方法参数分配一个默认值。

因此,如果您在调用方法时不提供参数,Ruby将使用默认值。例如,

# Method with a default parameter
def greet(name = "Guest")
  puts "Hello, #{name}!"
end

# Call method without passing an argument
greet

# Call method by passing an argument
greet("Alice")

输出

Hello, Guest!
Hello, Alice!

这里,参数name有一个默认值"Guest"。然后我们调用了该方法两次——第一次没有传递参数,第二次传递了参数。

此程序的工作原理如下:

调用方法 参数值 方法输出
greet "Guest" 你好,Guest!
greet("Alice") "Alice" 你好,Alice!

调用方法

在Ruby中,有两种调用方法的方式,具体取决于方法是否有参数。

调用没有参数的方法

如果方法不接受任何输入,您可以仅通过写其名称来调用它。例如,

def greet
  puts "Good Morning"
end

greet

# Output: Good Morning

调用有参数的方法

如果方法需要输入(参数),请将值放在括号内。例如,

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

greet("Sam")

# Output: Hello, Sam

注意:您可以在Ruby中省略方法调用时的括号,例如greet "Sam",但使用括号(例如greet("Sam"))更清晰且推荐。


返回值

您可以使用return关键字将结果发送回方法。例如,

def add(a, b)
  return a + b
end

puts add(2, 3)

# Output: 5

这里,该方法返回了ab的总和,即5

注意:方法可以返回不同类型的值,例如字符串、数字、布尔值等。它们也可以不返回值,就像我们之前编写的greet方法一样。

Ruby中的隐式返回

如果您省略return关键字,Ruby仍将返回方法中最后执行行的结果。例如,

def add(a, b)
  a + b
end

puts add(2, 3)

# Output: 5

这里,即使没有写return,Ruby也会自动返回a + b。这被称为隐式返回


方法作用域

方法的范围是程序中可以使用该方法及其变量的部分。

现在,只需记住这两点重要内容:

1. 方法无法访问在其外部定义的局部变量。

# Variable defined outside the method
name = "Alice"

def greet
  # Attempt to access name variable
  puts "Hello, #{name}!"
end

greet

输出

NameError: undefined local variable or method 'name' for main:Object#greet

这里,name变量在greet方法外部定义。因此,尝试在greet内部访问该变量将导致错误。

2. 方法的局部变量仅存在于方法内部。

def greet
  name = "Alice"
  puts "Hello, #{name}!"
end

# Invalid: 'name' variable only exists inside greet method
puts name

输出

NameError: undefined local variable or method 'name' for main

这里,name变量在greet方法内部定义。因此,该变量仅存在于greet的作用域内。

这就是为什么尝试在greet外部访问name会导致错误。


常见问题

如何在Ruby中命名方法?

Ruby遵循一些通用的命名约定,以保持代码的整洁和一致。

  • 方法名使用snake_case(蛇形命名法),例如say_hellocalculate_total
  • 避免方法名以大写字母开头,因为大写字母用于类名和常量名。

Ruby还在方法名末尾使用特殊字符来表示特定含义。

  • ?结尾的方法,例如empty?even?,通常返回truefalse值。
  • !结尾的方法(例如sort!)通常会修改其被调用的对象。请谨慎使用它们!
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战