陈斌彬的技术博客

Stay foolish,stay hungry

Ruby -变量

全局变量

全局变量以 $ 开头,并且未初始化的全局变量值为空;全局变量能够跨类使用。

范例:

#!/usr/bin/ruby        #文件名为global.rb

$global_var = 10        #定义全局变量
class Class1
  def print_global
     puts "Global variable in Class1 is #$global_var."
     #通过在变量或常量的前面放置”#”,可以实现对任何变量或常量的访问
  end
end
class Class2
  def print_global
     puts "Global variable in Class2 is #$global_var."
  end
end

class1obj = Class1.new    #创建一个对象
class1obj.print_global    #对象调用成员函数,成员函数调用全局变量
class2obj = Class2.new
class2obj.print_global

运行:

img

实例变量

实例变量以 @ 开头;实例变量可以跨任何特定的实例或对象中的方法。

范例:

#!/usr/bin/ruby            #文件名为cust.rb

class Customer
   def initialize(id, name, addr)
      @cust_id=id        #定义一个cust_id实例变量
      @cust_name=name
      @cust_addr=addr
   end
   def display_details()
      puts "Customer id #@cust_id"
      puts "Customer name #@cust_name"
      puts "Customer address #@cust_addr"
                        #访问实例变量
    end
end

cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")
                        #创建两个对象
cust1.display_details()        #调用成员函数,成员函数调用实例变量
cust2.display_details()

运行:

img

类变量

类变量以 @@ 开头,而且需要初始化之后才能在方法定义中使用; 类变量属于类,是类的一个属性,同时类变量可以跨不同的对象使用。

范例:

#!/usr/bin/ruby        #文件名为class_var.rb

class Customer
   @@no_of_customers=0
   def initialize(id, name, addr)
      @cust_id=id
      @cust_name=name
      @cust_addr=addr
   end
   def display_details()
      puts "Customer id #@cust_id"
      puts "Customer name #@cust_name"
      puts "Customer address #@cust_addr"
    end
    def total_no_of_customers()
       @@no_of_customers += 1
       puts "Total number of customers: #@@no_of_customers"
    end
end
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")
cust1.total_no_of_customers()
cust2.total_no_of_customers()

运行:

$ ruby class_var.rb

img

局部变量

局部变量是在方法中定义的变量,在方法外不可定义; 局部变量是以小写字母或者下划线 _ 开头的。