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的变量分为局部变量、实例变量、类变量、全局变量、常量。这些变量的名称规则和作用域不同,应根据需要选择适当的变量类型。