📜  Ruby变量

📅  最后修改于: 2021-01-08 12:57:49             🧑  作者: Mango

Ruby变量

Ruby变量是保存要在程序中使用的数据的位置。每个变量都有不同的名称。这些变量名称基于某些命名约定。与其他编程语言不同,无需在Ruby中声明变量。需要一个前缀来表示它。

Ruby中有四种类型的变量:

  • 局部变量
  • 类变量
  • 实例变量
  • 全局变量

局部变量

局部变量名称以小写字母或下划线(_)开头。它只能访问或在其初始化块内包含其范围。代码块完成后,变量将没有作用域。

当调用未初始化的局部变量时,它们被解释为对没有参数的方法的调用。

类变量

类变量名以@@符号开头。它们需要在使用前进行初始化。一个类变量属于整个类,可以从该类内部的任何地方访问。如果该值将在一个实例中更改,则它将在每个实例中更改。

类变量由该类的所有后代共享。未初始化的类变量将导致错误。

例:

#!/usr/bin/ruby 

class States 
   @@no_of_states=0 
   def initialize(name) 
      @states_name=name 
      @@no_of_states += 1 
   end 
   def display() 
     puts "State name #@state_name" 
    end 
    def total_no_of_states() 
       puts "Total number of states written: #@@no_of_states" 
    end 
end 

# Create Objects 
first=States.new("Assam") 
second=States.new("Meghalaya") 
third=States.new("Maharashtra") 
fourth=States.new("Pondicherry") 

# Call Methods 
first.total_no_of_states() 
second.total_no_of_states() 
third.total_no_of_states() 
fourth.total_no_of_states()

在上面的示例中,@@ no_of_states是一个类变量。

输出:

实例变量

实例变量名称以@符号开头。它属于该类的一个实例,并且可以在方法中从该类的任何实例进行访问。他们只能访问类的特定实例。

他们不需要初始化。未初始化的实例变量的值为nil。

例:

#!/usr/bin/ruby 

class States 
   def initialize(name) 
      @states_name=name 
   end 
   def display() 
      puts "States name #@states_name" 
    end 
end 

# Create Objects 
first=States.new("Assam") 
second=States.new("Meghalaya") 
third=States.new("Maharashtra") 
fourth=States.new("Pondicherry") 

# Call Methods 
first.display() 
second.display() 
third.display() 
fourth.display()

在上面的示例中,@states_name是实例变量。

输出:

全局变量

全局变量名称以$符号开头。它的范围是全局的,这意味着可以从程序中的任何位置访问它。

未初始化的全局变量将具有nil值。建议不要使用它们,因为它们会使程序变得晦涩复杂。

Ruby中有许多预定义的全局变量。

例:

#!/usr/bin/ruby 

$global_var = "GLOBAL" 
class One 
  def display 
     puts "Global variable in One is #$global_var" 
  end 
end 
class Two 
  def display 
     puts "Global variable in Two is #$global_var" 
  end 
end 

oneobj = One.new 
oneobj.display 
twoobj = Two.new 
twoobj.display

在上面的示例中,@states_name是实例变量。

输出:

概要

Local Global Instance Class
Scope Limited within the block of initialization. Its scope is globally. It belongs to one instance of a class. Limited to the whole class in which they are created.
Naming Starts with a lowercase letter or underscore (_). Starts with a $ sign. Starts with an @ sign. Starts with an @@ sign.
Initialization No need to initialize. An uninitialized local variable is interpreted as methods with no arguments. No need to initialize. An uninitialized global variable will have a nil value. No need to initialize. An uninitialized instance variable will have a nil value. They need to be initialized before use. An uninitialized global variable results in an error.