attr_accessor의 물건을 재발명하다
의 목적
attr_accessor
같은 방법은 어떻게 생긴 건가요?이런 의문에서
attr_accessor_alias
라는 액세서리 방법을 만들어 봤다.Module과 Class의 관계
Class.superclass
=> Module
모듈은 Class 레벨의 슈퍼클래스입니다.따라서 모델 클래스 실례 방법
Module#hoge
으로 정의된Class.new.hoge
은Class 클래스 실례 방법으로 사용할 수 있다.따라서 대상의 방법을 모델 클래스의 실례적인 방법으로 정의하면 된다.(Class 클래스의 인스턴스로 사용할 수도 있음)
생성 방법
class Module
def attr_accessor_alias(*attrs)
attrs.each do |attr|
define_method attr do
instance_variable_get("@#{attr}")
end
define_method "#{attr}=" do |val|
instance_variable_set("@#{attr}", val)
end
end
end
end
적당한 반을 세우다
class MyClass
# MyClassはModuleクラスを継承したClassクラスのインスタンスであるので
# attr_accessor_aliasを呼び出し可能
attr_accessor_alias :hoge, :fuga
end
[6] pry(main)> c = MyClass.new
=> #<MyClass:0x00007fd7418ae3d0>
[7] pry(main)> c.hoge
=> nil
[8] pry(main)> c.hoge = 30
=> 30
[9] pry(main)> c.fuga = 22
=> 22
[10] pry(main)> c
=> #<MyClass:0x00007fd7418ae3d0 @fuga=22, @hoge=30>
[11] pry(main)>
의 진전이 순조롭다.기쁘고 축하할 만하다.참고 자료
Reference
이 문제에 관하여(attr_accessor의 물건을 재발명하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/akhmgc/articles/2f2e23044c2e91텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)