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
的方法,它会显示一条消息。该方法仅在我们稍后在程序中调用它时执行。
下图展示了方法的定义方式。

方法参数
方法可以接受输入,称为参数,以根据不同值执行任务。
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
这里,该方法返回了a
和b
的总和,即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遵循一些通用的命名约定,以保持代码的整洁和一致。
- 方法名使用
snake_case
(蛇形命名法),例如say_hello
或calculate_total
。 - 避免方法名以大写字母开头,因为大写字母用于类名和常量名。
Ruby还在方法名末尾使用特殊字符来表示特定含义。
- 以
?
结尾的方法,例如empty?
或even?
,通常返回true
或false
值。 - 以
!
结尾的方法(例如sort!
)通常会修改其被调用的对象。请谨慎使用它们!