program tip

클래스 변수에 대한 Attr_accessor

radiobox 2020. 12. 8. 07:56
반응형

클래스 변수에 대한 Attr_accessor


attr_accessor다음 코드에서는 작동하지 않습니다. 오류는 " undefined method 'things' for Parent:Class (NoMethodError)":

class Parent
  @@things = []
  attr_accessor :things
end
Parent.things << :car

p Parent.things

그러나 다음 코드는 작동합니다.

class Parent
  @@things = []
  def self.things
    @@things
  end
  def things
    @@things
  end
end
Parent.things << :car

p Parent.things

attr_accessor인스턴스에 대한 접근 자 메서드를 정의합니다. 클래스 레벨 자동 생성 접근자를 원한다면 메타 클래스에서 사용할 수 있습니다.

class Parent
  @things = []

  class << self
    attr_accessor :things
  end
end

Parent.things #=> []
Parent.things << :car
Parent.things #=> [:car]

그러나 이것은 클래스 변수가 아닌 클래스 수준 인스턴스 변수를 생성 합니다. 클래스 변수가 상속을 처리 할 때 예상 할 수있는 것과 다르게 동작하기 때문에 이것은 어쨌든 원하는 것일 수 있습니다. " Ruby의 클래스 및 인스턴스 변수 "를 참조하십시오 .


attr_accessor인스턴스 변수에 대한 접근자를 생성 합니다. Ruby의 클래스 변수는 매우 다르며 일반적으로 원하는 것이 아닙니다. 여기서 원하는 것은 클래스 인스턴스 변수입니다. 다음 attr_accessor과 같이 클래스 인스턴스 변수와 함께 사용할 수 있습니다 .

class Something
  class <<self
    attr_accessor :things
  end
end

그런 다음 쓸 수 Something.things = 12있고 작동합니다.


설명 : 클래스 변수는 attr_accessor. 인스턴스 변수에 관한 모든 것 :

class SomeClass
  class << self
    attr_accessor :things
  end
  @things = []
end

Ruby에서 class는 클래스 "Class"(하나님, 나는 그것을 좋아합니다)의 attr_accessor인스턴스이고 인스턴스 변수에 대한 접근 자 메서드를 설정하기 때문입니다.


이것은 아마도 가장 간단한 방법 일 것입니다.

class Parent
  def self.things
    @@things ||= []
  end
end
Parent.things << :car

p Parent.things

Аlso note that a singleton method is a method only for a single object. In Ruby, a Class is also an object, so it too can have singleton methods! So be aware of when you might be calling them.

Example:

class SomeClass
  class << self
    def test
    end
  end
end

test_obj = SomeClass.new

def test_obj.test_2
end

class << test_obj
  def test_3
  end
end

puts "Singleton methods of SomeClass"
puts SomeClass.singleton_methods
puts '------------------------------------------'
puts "Singleton methods of test_obj"
puts test_obj.singleton_methods

Singleton methods of SomeClass

test


Singleton methods of test_obj

test_2

test_3

참고URL : https://stackoverflow.com/questions/21122691/attr-accessor-on-class-variables

반응형