变量是用于保存数据的容器(存储区域)。
下面是一个简单的 Ruby 变量示例。您可以阅读其余教程以了解更多信息。
示例
name = "Alice"
age = 25
puts name
puts age
# Output:
# Alice
# 25
在这里,name
和 age
是变量,分别存储值 "Alice"
和 25。
创建 Ruby 变量
创建变量很简单。您只需选择一个名称,然后使用 =
符号为其分配一个值。
创建 Ruby 变量的语法是
variable_name = value
例如,
price = 99
language = "Ruby"
这里,
price
是一个存储数字 99 的变量。language
是一个存储文本"Ruby"
的变量。
常见问题
您在创建变量时无需提及变量的数据类型。Ruby 会根据您分配的值自动确定数据类型。例如:
name = "Alice" # Ruby understands this is a string
age = 25 # Ruby knows this is an integer number
price = 99.99 # This is a decimal (float)
您无需说明 String
、Integer
或 Float
— Ruby 会处理这些。
更改(重新分配)值
创建变量后,您可以随时通过为其分配新值来更改其值。例如:
language = "Ruby"
puts language
# Change the value of the variable
language = "Python"
puts language
输出
Ruby Python
这里,
- 最初,变量
language
存储"Ruby"
。 - 之后,我们将其重新分配为
"Python"
。
Ruby 变量的类型
Ruby 有不同的变量,具体取决于它们的使用位置和方式。
主要变量类型是
- 局部变量
- 实例变量
- 类变量
- 全局变量
让我们来详细了解一下。
1. 局部变量
局部变量在方法、块或循环中使用。它们只能在定义它们的地方访问,不能在外部使用。例如:
def greet
# Local variable
_message = "Hello!"
puts _message
end
# Call the greet method
# Prints 'Hello!' to the screen
greet
# Error: _message is not available outside the method
puts _message
在这里,_message = "Hello!"
是在 greet
方法内部定义的局部变量。当调用 greet
时,它会打印 "Hello!"
,因为该变量存在于该方法中。
然而,puts _message
位于方法之外。由于局部变量仅存在于其定义的函数内部,因此此行将导致错误。
注意:局部变量以小写字母或下划线 (_
) 开头。
2. 实例变量
实例变量在类中使用,属于该类的特定实例。它们可以在同一实例的所有方法中访问,但不能在类外部直接访问。
实例变量始终以 @
开头。例如:
class Person
def set_name(name)
# Create and initialize an instance variable
@name = name
end
def show_name
# Print the instance variable
puts @name
end
end
# Create an instance of the Person class
p = Person.new
p.set_name("Alice")
p.show_name
输出
Alice
在这里,@name
是一个实例变量。它在一种方法(set_name
)中创建和初始化,并在另一种方法(show_name
)中使用。
由于这两种方法都属于同一个实例(p
),因此 @name
变量在这两个地方都有效。
但是,尝试使用 p.@name
直接访问实例变量会导致语法错误,因为实例变量旨在仅在类中使用。
puts p.@name # SyntaxError: unexpected '@'
3. 类变量
类变量由类的所有实例共享。它以 @@
开头。例如:
class Animal
@@type = "Mammal" # Class variable
def show_type
puts "Animal type: #{@@type}"
end
end
# Create an instance of the Animal class
a1 = Animal.new
# Create another instance of Animal
a2 = Animal.new
a1.show_type
a2.show_type
输出
Animal type: Mammal Animal type: Mammal
在这里,@@type
是一个类变量 — 对于 Animal
类型的所有实例都是相同的。因此,a1
和 a2
都可以访问和打印相同的 @@type
值。
4. 全局变量
全局变量可以在 Ruby 程序的任何地方使用 — 在方法、类内部,甚至在它们外部。它始终以 $
符号开头。例如:
# Global variable
$greeting = "Hello!"
def say_hello
puts $greeting
end
say_hello
puts $greeting
输出
Hello! Hello!
在这里,$greeting
是一个全局变量。它定义在 say_hello
方法之外,但仍然可以在其内部访问。
注意:在大程序中尽量不要使用全局变量。它们会让您的代码变得混乱并导致意外的错误。
快速总结
让我们快速回顾一下 Ruby 中不同类型的变量。
变量类型 | 前缀 | 作用域 |
---|---|---|
局部变量 | 小写字母或 _ |
仅在其定义的函数/块内部。 |
实例变量 | @ |
可在类的同一实例的所有方法中访问。 |
类变量 | @@ |
在类的所有实例之间共享。 |
全局变量 | $ |
可在程序的任何位置访问。 |