如何在Ruby中为类变量编写writer方法?

use*_*320 1 ruby oop metaprogramming class

我正在研究Ruby,我的大脑只是僵住了.

在下面的代码中,我将如何为'self.total_people'编写类编写器方法?我正在试图"计算"类"Person"的实例数.

    class Person

     attr_accessor :name, :age

 @@nationalities = ['French', 'American', 'Colombian', 'Japanese', 'Russian', 'Peruvian']

 @@current_people = []

 @@total_people = 0

def self.nationalities #reader
   @@nationalities
 end

 def self.nationalities=(array=[]) #writer
   @@nationalities = array
 end

 def self.current_people #reader
   @@current_people
 end

 def self.total_people #reader
   @@total_people
 end

def self.total_people #writer
  #-----?????
end



 def self.create_with_attributes(name, age)
   person = self.new(name)
   person.age = age
   person.name = name
   return person
 end


 def initialize(name="Bob", age=0)
   @name = name
   @age = age
   puts "A new person has been instantiated."
   @@total_people =+ 1
   @@current_people << self
 end
Run Code Online (Sandbox Code Playgroud)

jde*_*eno 7

您可以通过在方法名称的末尾附加等号来定义一个:

def self.total_people=(v)
  @@total_people = v
end
Run Code Online (Sandbox Code Playgroud)

您将所有实例放在@@ current_people中,您可以更准确地定义total_people:

def self.total_people
  @@current_people.length
end
Run Code Online (Sandbox Code Playgroud)

并摆脱所有@@ total_people相关代码.