рд╢реБрдн рджреЛрдкрд╣рд░, рд╣рдмреНрд░ред
рдореИрдВ рд░реВрдмреА рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рдирдХреА рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрдореА рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рдореИрдВ рднрд╛рд╖рд╛ рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╢рд╛рдпрдж рдЗрди рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрдВрднреАрд░ рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВ, рдмрд╛рдХреА рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╕рд╛рдзрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рджреЛрд╖ рдФрд░ рдПрдХ рддрд┐рдкрд╣рд┐рдпрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдХрд╛рдо рдХреЛ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ - рдЖрдкрдХреЛ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдордгрд┐ рдореЗрдВ рднреА рднреЗрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╡реЗ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдмрд╣реБрдд рдЫреЛрдЯреЗ рдФрд░ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВред рдФрд░ рдХрднреА-рдХрднреА рдЖрдк рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ - рдФрд░ рдЖрдк рд╡рд╣рд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдХрд╛рд░реНрдп рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХрд╛ рд╣реИред рдпрд╣ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдорд╛рдирдХ рднрд╛рд╖рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдкреВрд░реНрдг рд╣реИред рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд╛рда рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдкреИрдЪ рдХрд░рддрд╛ рд╣реИред ;-)
рддреЛ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
- C ++ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рд╡рд┐рдзрд┐
- рдПрдХ рд╣реИрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрд╕рд╕реЗ рдПрдХ рдФрд░ рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ
- рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ
- рдЕрд▓рдЧ рдЫреЛрдЯреА рдмрд╛рддреЗрдВ
C ++ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреА рд╡рд┐рдзрд┐
рдпрд╣, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХрд╛рдЯрдиреЗ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА, рдЪреЗрдХ рдкреНрд░рдХрд╛рд░, рдЙрдкрд╕реНрдерд┐рддрд┐-рддрд░реНрдХ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рднреА рд▓рд┐рдЦреЗрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рдЬреЛ рдХрд┐ рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕рд╣реЗрдЬ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрд▓рд┐рдпрд╛рд╕-рдореЗрдердб-рдЪреЗрди'рдЗрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
module MethodOverload module ClassMethods def overload(meth, submethods_hash) if method_defined?(meth) alias_method "
рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
x = X.new xf
рдпрджрд┐ рдЖрдк рд╡рд┐рдзрд┐ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
class X include MethodOverload def f(*args) 'original version ' + args.to_s end def f_string(str) 'string version ' + str.to_s end def f_numeric(num) 'numeric version ' + num.to_s end def f_pair_numeric(num1,num2) "pair numeric version
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рдмрд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
class X def f(*args) if args.size == 2 && args.first.is_a? Numeric && args.last.is_a? Numeric "pair numeric version
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕реЗ рдлреБрд▓рд╛рддреА рд╣реИ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдФрд░ рд╕реВрдЪреА рд╕рдВрдкреАрдбрд╝рди (* args) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдзрд┐рднрд╛рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╕рдореБрджрд╛рдп рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рддреЛ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдХреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рд░реВрдмреА рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрдкрдХрд░рдг рд░рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдПрдХ рд╣реИрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрд╕рд╕реЗ рдПрдХ рдФрд░ рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рдПрдХ рдиреБрдХрд╕рд╛рди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╕реАрдзреЗ рдПрдиреНрдпреБрдорд░реЗрдмрд▓ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рдмрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рджреВрд╕рд░реЗ рдорд╛рдгрд┐рдХ рдореЗрдВ рднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ trifling рдорд╛рдорд▓рд╛ рд╣реИ)ред
рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реИрд╢ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдФрд░ рдЙрд╕рд╕реЗ рдПрдХ рдФрд░ рд╣реИрд╢ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирдХреНрд╢рд╛ред рдпрд╣ рд╕рд┐рд░реНрдл рд╣реИрд╢ рдХреЗ рд▓рд┐рдП рдирдХреНрд╢рд╛ рдЖрдкрдХреЛ рдХреНрдпрд╛ рджреЗрдЧрд╛? рдпрд╣ рд╕рд╣реА рд╣реИ, рдПрдХ рд╕рд░рдгреАред рдЖрдорддреМрд░ рдкрд░ рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рди рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ:
{a: 1, b:2, c:3, z:26}.inject({}){|hsh,(k,v)| hsh.merge(k=>v.even?)}
рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред
Hash[{a: 1, b:2, c:3, z:26}.map{|k,v| [k,v.even?]}]
рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рдШрд╛рддрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЪрд╛рдмрд┐рдпрд╛рдБ рднреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╣рд╛рд╢ [рдЧрд┐рд░рдлреНрддрд╛рд░реА] рдирд╣реАрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП to_hash рд╡рд┐рдзрд┐ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди arr.to_hashред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рд╕рднреА рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдЧреА, рд╢рд╛рдпрдж рдЗрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ Array # to_hash рд╡рд┐рдзрд┐ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИ (
рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВ)ред
рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Array рд╕реЗ рдкреНрд░рд╛рдкреНрдд HashLikeArray рдХреНрд▓рд╛рд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреЗрд╡рд▓ рдлреЙрд░реНрдо рдХреЗ [[k1, v1], [k2, v2], ...] рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЙрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХред
рдЗрд╕ рдмреАрдЪ, рд╣рдо рдЗрдВрдЬреЗрдХреНрд╢рди рдкрджреНрдзрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣реИрд╢_рдореИрдк рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ:
class Hash def hash_map(&block) inject({}) do |hsh,(k,v)| hsh.merge( k=> block.call(v)) end end end
рдФрд░ рдЕрдм рдПрд░реЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЗрд╕рдХреЗ рд╕рд╛рде, рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрдм рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрд░реЗ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╣реИрд╢ # to_a рдкрджреНрдзрддрд┐ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдПрд░реЗ рдХреЛ рд╡рд╛рдкрд╕ рди рдХрд░реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рд╣реИрд╢рд▓рд╛рдЗрдХ рдРрд░реЗ рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд░реИрдкрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдореВрд▓ Hash # to_a рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ Array рд╡рд░реНрдЧ рд╕реЗ HashLikeArray рдХреЗ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
рдЖрдЗрдП рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ (рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдХрд┐рдП рдмрд┐рдирд╛)
class HashLikeArray < Array def initialize(*args,&block)
рджрд╛рд╣рд┐рдиреЗред рдЕрдм рдХрд╛рд░реНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд░реЗ рд╕реЗ рдХрдо рд╡рд┐рдХрд╕рд┐рдд рд╡рд░реНрдЧ рд╣реЛ:
class Animal attr_accessor :weight def self.get_flying_animal res = self.new res.singleton_class.class_eval { attr_accessor :flight_velocity} res.flight_velocity = 1 res end end class Bird < Animal attr_accessor :flight_velocity end
рдЕрдм, рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреБрд░рд╛рдиреА get_flying_animal рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рддрдм рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдмрд░реНрдб рд╡рд░реНрдЧ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ред рдкрд╢реБ :: get_flying_animal рд╣рдореЗрд╢рд╛ рдкрдХреНрд╖рд┐рдпреЛрдВ рдХреЛ рдЪрд┐рдкрдХрд╛рдП рдЧрдП рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡реЗ рдкрд╢реБ рд╡рд░реНрдЧ рдХреЗ рдереЗред рдЕрдм рдмрд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╢реБ рд╡рд░реНрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВ :: get_flying_animal рд╡рд┐рдзрд┐, рдЬреЛ рд╕рдорд╛рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рдкрдХреНрд╖реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдХреЗрд╡рд▓ рдмрд░реНрдб рд╡рд░реНрдЧред рд╣рд╛рдВ, get_flying_animal рд╡рд┐рдзрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рд╕реНрдерд┐рддрд┐ рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рддрдмрд╛рд╣ рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрдм рдЖрдк рдкрд╢реБ рд╡рд░реНрдЧ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред (рдПрдХ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ, Array :: [] рдпрд╛ Array # рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ HashLikeArray # to_a рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЖрдк рдмрд╕ рдХрд╣реАрдВ рд╕реЗ рдХреЛрдб рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ)
рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЕрдпреЛрдЧреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдХреЛ рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдП
class Object def type_cast(new_class) new_obj = new_class.allocate instance_variables.each do |varname| new_obj.instance_variable_set(varname, self.instance_variable_get(varname)) end new_obj end end
рдЕрдм рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
def Bird.get_flying_animal Animal.get_flying_animal.type_cast(Bird) end
рдпрджрд┐ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдЬреАрдм рдХреНрд░реИрдХ рдХреЛ рдЯрд╛рдЗрдк_рдХрд╛рд╕реНрдЯ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП - рд▓рд┐рдЦреЗрдВ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рд╣реИред
рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдПрдХ рдмрд╣рд╕ рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЙрдкрд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рд╕рд╣реА рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЧрдВрджреА рд╣реИрдХ рд╣реИ рдФрд░ рдУрдУрдкреА рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╣реИрдХ ... рд░реВрдмреА рдПрдХ рдРрд╕реА рд╡рд┐рд╢реЗрд╖ рднрд╛рд╖рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдЯрдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рдЕрдЧрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рд╡рд╕реНрддреБ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
x=X.new x.class = Y
рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреЛрдЬ рд╡рд┐рдзрд┐рдпреЛрдВ, рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ @@- рдЪрд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж: рдХреНрдпрд╛ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рдХреНрд╖рдг рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрд╕рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдирдпрд╛ рд╡рд░реНрдЧ рдкреБрд░рд╛рдиреЗ рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реИ, рддреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛рдлреА рд╣рдж рддрдХ рдкреБрд░рд╛рдиреЗ рд╡рд░реНрдЧ рдХреЛ рд╕реМрдВрдк рджреА рдЬрд╛рддреА рд╣реИред
рдЕрд▓рдЧ рдЫреЛрдЯреА рдмрд╛рддреЗрдВ
рдЕрдм рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП:
рд╕реНрд╡ рд╡рд╛рдкрд╕реА рд╡рд┐рдзрд┐
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛
def identity self end
рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рддрд╛рдХрд┐ рдЖрдк .collect рдХреЗ рдмрдЬрд╛рдп .collect (&: рдкрд╣рдЪрд╛рди) рдЬреИрд╕реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХреЗрдВред {| x | x}
рдирдВрдмрд░рд┐рдВрдЧ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╕ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - to_a рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА рд╡рд┐рдзрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдмреНрд▓реЙрдХ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд░реЗрд▓ рд╡рд┐рдзрд┐
Nil # рдХреЛрд╢рд┐рд╢ ред
class Object def try(method_name,&block) send method_name rescue yield end end
рдЕрдм рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
x.try(:transform,&:another_transform)
рдФрд░ рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЕрдкрдиреА рдкрд╣рдЪрд╛рди рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:
x.try(:transform, &:identity)
- рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдирд╣реАрдВ - рдореВрд▓ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░ рджреА рдЬрд╛рдПрдЧреАред
рдСрдмреНрдЬреЗрдХреНрдЯ # рдЗрди (рд╕рдВрдЧреНрд░рд╣) рд╡рд┐рдзрд┐
рд░реЗрд▓ рд╡рд┐рдзрд┐
color.in?([:red,:green,:blue])
рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ
[:red,:green,:blue].include?(color)
рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
def in?(collection) raise ArgumentError unless collection.respond_to? :include? collection.include? self end
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдкреВрд░реНрдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ActiveSupport) рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд░рд╣рддреА рдереАред
рдкреВрдЫрддрд╛рдЫ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк
рдХреНрдпрд╛ рдЖрдк arr.not_empty рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? рдЕрдирд╛рдбрд╝реА рдХреЗ рдмрдЬрд╛рдп! arr.empty? рдорд╛рдгрд┐рдХ рдореЗрдВ рдХрдИ рд╕рдорд╛рди рдкреВрдЫрддрд╛рдЫ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рдХреЛрдИ рдЗрдирдХрд╛рд░ рдирд╣реАрдВ рд╣реИред рдкреНрд░рдХрд╛рд░ not_empty рдХреЗ рддрд░реАрдХреЗ? рдФрд░ not_nil? рдореИрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореИрдВ Method_missing (рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ method_missing рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╢реНрди-рддрд░реАрдХреЛрдВ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ)
class X def method_missing(meth,*args,&block) match = meth.to_s.match(/^not_(.+\?)$/) return !send(match[1], *args,&block) if match && respond_to?(match[1]) super end end X.new.not_nil?
рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛рдЯреЗрдВ
рдореБрдЭреЗ рдлрд╝рд╛рдЗрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдШреГрдгрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо_wo_extname рдФрд░ basename_wo_extname рд╡рд┐рдзрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ:
class File def self.filename_wo_ext(filename) filename[0..-(1+self.extname(filename).length)] end def self.basename_wo_ext(filename) self.basename(filename)[0..-(1+self.extname(filename).length)] end end File.basename_wo_ext('d:/my_folder/my_file.txt')
рдХреБрдЫ рдЦреБрд╢рд┐рдпрд╛рдБ
рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╢рд┐рдХрд╛рдпрддреЛрдВ рдХреЗ рдкрд╣рд╛рдбрд╝ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рд╕рдм рдХреБрдЫ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж - рдЕрджреНрднреБрдд рд░реВрдмреА рднрд╛рд╖рд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд░реВрдмреА рдХреА рджреБрдирд┐рдпрд╛ рд╕реЗ рдПрдХ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ -
рдЖрд▓рд╕реА рдЕрдВрдХрдЧрдгрд┐рдд ред