📜  Ruby 静态成员

📅  最后修改于: 2022-05-13 01:55:18.719000             🧑  作者: Mango

Ruby 静态成员

在编程中,静态关键字主要用于内存管理。 static 关键字用于在该类的对象之间共享该类的相同方法或变量。

Ruby 中有一个类的各种成员。一旦在 Ruby 中创建了一个对象,该对象的方法和变量就在该类的对象中。方法可以是公共的、私有的或受保护的,但 Ruby 中没有静态方法或变量的概念。 Ruby 没有 static 关键字来表示特定方法属于类级别。然而,静态变量可以使用类变量在 ruby 中实现,静态方法可以在 ruby 中使用该类的方法之一中的类变量来实现。

在 Ruby 中,static 关键字有两种实现:

  • 静态变量
  • 静态方法

静态变量:一个类可以具有类的所有实例共有的变量。这样的变量称为静态变量。静态变量在 ruby 中使用类变量实现。当一个变量被声明为静态时,它的空间在程序的生命周期内被分配。类变量的名称总是以@@ 符号开头。
例子 :

# Ruby program to demonstrate Static Variable
   
class Geeks
  
    # class variable
    @@geek_count = 0
  
    def initialize
        @@geek_count += 1
        puts "Number of Geeks = #{@@geek_count}"
    end
end
  
# creating objects of class Geeks 
g1 = Geeks.new
g2 = Geeks.new
g3 = Geeks.new
g4 = Geeks.new

输出:

Number of Geeks = 1
Number of Geeks = 2
Number of Geeks = 3
Number of Geeks = 4

在上面的程序中,Geeks 类有一个类变量 geek_count。这个 geek_count 变量可以在 Geeks 类的所有对象之间共享。静态变量由对象共享

静态方法:一个类可以有一个类的所有实例通用的方法。这样的方法称为静态方法。静态方法可以在 ruby 中使用该类方法中的类变量来实现。
例子 :

# Ruby program to demonstrate Static Method
  
class Geeks
      
    #class method
    @@geek_count = 0
  
    # defining instance method 
    def incrementGeek
        @@geek_count += 1
    end
    # defining class method
    def self.getCount
        return @@geek_count
    end
end
  
# creating objects of class Geeks
g1 = Geeks.new
# calling instance method
g1.incrementGeek()
  
g2 = Geeks.new
# calling instance method
g2.incrementGeek()
  
g3 = Geeks.new
# calling instance method
g3.incrementGeek()
  
g4 = Geeks.new
# calling instance method
g4.incrementGeek()
  
# calling class method
puts "Total Number of Geeks = #{Geeks.getCount()}"

输出:

Total Number of Geeks = 4

在上述程序中,incrementGeek() 方法是 Geeks 类的静态方法,可以在 Geeks 类的所有对象之间共享。静态成员函数只允许访问静态数据成员或其他静态成员函数,不能访问非静态数据成员或成员函数。