Ruby 变量

变量是用于保存数据的容器(存储区域)。

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

示例

name = "Alice"
age = 25

puts name
puts age

# Output:
# Alice
# 25

在这里,nameage 是变量,分别存储值 "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)

您无需说明 StringIntegerFloat — 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 类型的所有实例都是相同的。因此,a1a2 都可以访问和打印相同的 @@type 值。


4. 全局变量

全局变量可以在 Ruby 程序的任何地方使用 — 在方法、类内部,甚至在它们外部。它始终以 $ 符号开头。例如:

# Global variable
$greeting = "Hello!"   

def say_hello
  puts $greeting
end

say_hello        
puts $greeting   

输出

Hello!
Hello!

在这里,$greeting 是一个全局变量。它定义在 say_hello 方法之外,但仍然可以在其内部访问。

注意:在大程序中尽量不要使用全局变量。它们会让您的代码变得混乱并导致意外的错误。


快速总结

让我们快速回顾一下 Ruby 中不同类型的变量。

变量类型 前缀 作用域
局部变量 小写字母或 _ 仅在其定义的函数/块内部。
实例变量 @ 可在类的同一实例的所有方法中访问。
类变量 @@ 在类的所有实例之间共享。
全局变量 $ 可在程序的任何位置访问。
你觉得这篇文章有帮助吗?

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

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

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