Ruby 变量
Ruby 变量
在Ruby中,变量是存储数据的容器。变量可以存储不同类型的数据,如字符串、数字、布尔等。在Ruby中,有五种变量类型:
- 局部变量(Local Variables)
- 实例变量(Instance Variables)
- 类变量(Class Variables)
- 全局变量(Global Variables)
- 常量(Constants)
局部变量
在Ruby中,局部变量以小写字母或下划线开头,并可以包含英文字母、数字和下划线。局部变量的作用域仅限于定义它的程序块内。当程序块执行完毕,变量就会从内存中删除。例如:
def test_method
x = 10
puts x
end
test_method #=> 10
puts x #=> undefined local variable or method `x' for main:Object (NameError)
在上面的示例中,x
是一个局部变量,只在test_method
方法中可见。当方法执行完毕后,x
被从内存中删除,因此在方法外部不能访问x
。
实例变量
实例变量以@
符号开头,并可以包含英文字母、数字和下划线。实例变量的作用域是整个对象。
class Person
def initialize(name)
@name = name
end
def say_hello
puts "Hello, #{@name}!"
end
end
person1 = Person.new("Alice")
person1.say_hello #=> Hello, Alice!
person2 = Person.new("Bob")
person2.say_hello #=> Hello, Bob!
在上面的示例中,@name
是一个实例变量,可以在对象的任何方法中使用。
类变量
类变量以@@
符号开头,并可以包含英文字母、数字和下划线。类变量的作用域是整个类。在Ruby中,类变量是共享的,即类的所有实例都可以访问和修改类变量的值。
class Person
@@count = 0
def initialize(name)
@name = name
@@count += 1
end
def say_hello
puts "Hello, #{@name}!"
end
def self.count
@@count
end
end
person1 = Person.new("Alice")
person2 = Person.new("Bob")
puts Person.count #=> 2
在上面的示例中,@@count
是一个类变量,用于跟踪Person
类的实例数量。每次创建一个新的Person
实例时,都会将数量加一,因此最终@@count
的值为2。
全局变量
全局变量以$
符号开头,并可以包含英文字母、数字和下划线。全局变量的作用域是整个程序,可以在任何地方都可以访问和修改全局变量的值。在Ruby中,建议尽量少使用全局变量,因为它们可以在程序的任何地方被修改。
$global_var = "I am a global variable"
def test_method
puts $global_var
end
test_method #=> I am a global variable
在上面的示例中,$global_var
是一个全局变量,可以在test_method
方法中访问到它。
常量
常量以大写字母开头,并可以包含英文字母、数字和下划线。常量的作用域是整个程序。在Ruby中,常量是不可变的,即一旦定义就不能修改。
MY_CONSTANT = "I am a constant"
def test_method
puts MY_CONSTANT
end
test_method #=> I am a constant
在上面的示例中,MY_CONSTANT
是一个常量,可以在test_method
方法中访问到它。
总结
Ruby的变量分为局部变量、实例变量、类变量、全局变量、常量。这些变量的名称规则和作用域不同,应根据需要选择适当的变量类型。