MST

星途 面试题库

面试题:Ruby中变量与常量的定义及作用域基础问题

在Ruby中,如何定义一个局部变量、实例变量、类变量和常量?分别说明它们的作用域规则,并且举例说明在类的不同方法中如何访问这些变量或常量。
45.2万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

局部变量

  • 定义:以小写字母或下划线开头,如 local_variable = "value"
  • 作用域规则:在定义它的方法、循环或块内有效。一旦这些代码块结束,局部变量就超出作用域并被销毁。
  • 示例
def example_method
  local_variable = "I'm a local variable"
  puts local_variable
end
example_method
# 这里无法访问 local_variable,会报错

实例变量

  • 定义:以 @ 符号开头,如 @instance_variable = "value"
  • 作用域规则:在定义它的对象实例内有效。不同的对象实例有各自独立的实例变量副本。
  • 示例
class ExampleClass
  def set_instance_variable
    @instance_variable = "I'm an instance variable"
  end

  def get_instance_variable
    @instance_variable
  end
end

obj = ExampleClass.new
obj.set_instance_variable
puts obj.get_instance_variable

类变量

  • 定义:以 @@ 符号开头,如 @@class_variable = "value"
  • 作用域规则:在整个类及其所有子类中共享。所有类实例都可以访问和修改类变量。
  • 示例
class ExampleClass
  @@class_variable = "I'm a class variable"

  def self.get_class_variable
    @@class_variable
  end

  def set_class_variable(new_value)
    @@class_variable = new_value
  end

  def get_class_variable
    @@class_variable
  end
end

obj1 = ExampleClass.new
obj2 = ExampleClass.new
puts ExampleClass.get_class_variable
obj1.set_class_variable("New class variable value")
puts obj2.get_class_variable

常量

  • 定义:以大写字母开头,如 CONSTANT = "value"
  • 作用域规则:在定义它的模块或类内有效。虽然在Ruby中常量可以重新赋值,但这通常被视为不好的实践。
  • 示例
class ExampleClass
  CONSTANT = "I'm a constant"

  def get_constant
    CONSTANT
  end
end

obj = ExampleClass.new
puts obj.get_constant