рдХрдХреНрд╖рд╛-рд╕реНрддрд░реАрдп рдЙрджрд╛рд╣рд░рдг рдЪрд░

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрдИ рдкреНрд░рдХрд╛рд╢рди рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рдХреЗ рдкрд╛рд╕ рдмрд╛рд░-рдмрд╛рд░ рд╕рд╡рд╛рд▓ рд╣реИрдВред рдореИрдВ рдЗрд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рдирд┐рдХрд╛рдп рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╡реЗрд░рд┐рдПрдмрд▓ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:



class User @var = 1 end
      
      







рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░



рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪрд░ рдЪрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:

 class A def set_a( v ); @a = v; end def get_a; return @a; end end o1 = A.new o1.instance_variables # => [] o1.get_a # => nil o1.set_a 123 o1.instance_variables # => ["@a"] o1.get_a # => 123 o2 = A.new o2.get_a # => nil
      
      







рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдШрдбрд╝реА рдХреА рдХрд▓ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред



рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди



рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде рдЖрд╢реНрдЪрд░реНрдп рдЖрдорддреМрд░ рдкрд░ рддрдм рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:



 class B attr_accessor :b #  set_b, get_b    @b = 1 end o1 = B.new o1.b # => nil o1.instance_variables # => [] o1.b = 2 o1.b # => 2 o1.instance_variables # => ["@b"]
      
      







Op-рдкрд╛ред рдФрд░ рд╣рдорд╛рд░рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд╣рд╛рдБ рд╣реИ? рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рдЪрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?



рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрд░ рд╡рд░реНрдЧ-рд╕реНрддрд░реАрдп рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВ (рдпрд╣ рд░реВрд╕реА рдореЗрдВ рдХреИрд╕реЗ рд╣реИ "рдХрдХреНрд╖рд╛-рд╕реНрддрд░реАрдп рдЙрджрд╛рд╣рд░рдг рдЪрд░"?)



рдХрдХреНрд╖рд╛рдПрдВ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред





рд░реВрдмреА рдореЗрдВ, рдХрд┐ рдХреЛрдИ рднреА рдХреЛрдб рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ (рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рд╣рдореЗрд╢рд╛ рд╕реНрд╡ -рдЫрджреНрдо-рдЪрд░ рд╕реЗ рд╕реБрд▓рдн рд╣реИред рдпреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рддреНрдп рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдХрд┐рд╕ рд╕рдВрджрд░реНрдн (рдСрдмреНрдЬреЗрдХреНрдЯ) рдореЗрдВ рд▓рд╛рдЗрди 4 рдФрд░ рд▓рд╛рдЗрди 2 рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ?



 1: class User 2: @b = 1 3: def a 4: @a = 1 5: end 6: end
      
      







рд▓рд╛рдЗрди 4 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛ рдЖрдк User.new рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ



рдФрд░ рдкрдВрдХреНрддрд┐ 2 рдХреЛ рдХреНрд▓рд╛рд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреЗ рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢рдмреНрдж рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдХрдВрд╕рдВрдЯреЗрдВрдЯ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдЯрд╛рдЗрдк рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╣реИ ред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред @ рдмреА рдЪрд░ рдЗрд╕ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред



 o1 = B.new o1.b # => nil o1.instance_variables # => [] B.instance_variables # => ["@b"]
      
      







рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣ рд╣рдореЗрд╢рд╛ рд╡рд╣рд╛рдВ рдереАред рдХрдХреНрд╖рд╛ рдмреА рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрдХреНрд╖рд╛ рдмреА рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдХреНрд╖рд╛ рдмреА рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реНрдерд┐рд░ рдмреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред



рдЖрд╡реЗрджрди





рд╡рд░реНрдЧ-рд╕реНрддрд░реАрдп рдЙрджрд╛рд╣рд░рдг рдЪрд░ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддреЗ рд╣реИрдВ?



рд╡реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд░реНрдЧ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рддрд╣рдд рд╕рднреА рд╡рдВрд╢ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрдЧ рдЪрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдорд╛рд░рд╛ рдЪрд░ рдХреЗрд╡рд▓ рдЙрд╕реА рд╡рд░реНрдЧ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



 class B @b = 1 def self.set_b( v ); @b = v; end def self.get_b; @b; end end B.get_b # => 1 B.set_b 2 B.get_b # => 2 class B1 < B; end B1.get_b # => 1 B1.set_b 3 B1.get_b # => 3 B.get_b # => 2
      
      







рдпрд╣реА рд╣реИ, рд╡рд░реНрдЧ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рд╛рде рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдирдпрд╛ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╡рд░реНрдЧ рдЪрд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВ:



 class C @@c = 1 def self.set_c( v ); @@c = v; end def self.get_c; @@c; end end C.get_c # => 1 C.set_b 2 C.get_b # => 2 class C1 < C; end C1.get_c # => 2 C1.set_c 3 C1.get_c # => 3 C.get_c # => 3 class C2 < C; @@c = 4; end C.get_c # => 4 C1.get_c # => 4 C2.get_c # => 4
      
      







рдкрд╣реБрдВрдЪрдХрд░реНрддрд╛





рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрд░ рдХреЛ рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



 class A class << self attr_accessor :a end #    : self.class.attr_accessor :a #   ,  attr_accessor  private method :( end A.instance_variables # => ["@a"] A.class_variables # => [] Aa # => nil Aa = 123 Aa # => 123
      
      







рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░реЗрд▓ cattr_accessor: рд╕рдорд╛рди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐рдпрд╛рдБ рдмрдирд╛рдПрдЧреА, рдХреЗрд╡рд▓ рд╡реЗ рд╣реА рд╡рд░реНрдЧ рдЪрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВрдЧреАред



 class User cattr_accessor :a end User.instance_variables # => [] User.class_variables # => ["@@a"]
      
      







рд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдордЧреНрд░реА:





railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby

wiseheartdesign.com/articles/2006/09/22/class-level-instance-variables

snippets.dzone.com/posts/show/4382



рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ, рдЕрдЧрд░ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рд▓рд┐рдВрдХ рдпрд╣рд╛рдВ рдлреЗрдВрдХреЗрдВ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╢реИрдХреНрд╖рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд╕рдХреЗрдВред



All Articles