рдореИрдВрдиреЗ рд╡рд┐рдо рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдХреИрд╕реЗ рд▓рд┐рдЦреАрдВ

рдЫрд╡рд┐

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рд▓рдЧрднрдЧ рдЪрд╛рд░ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдореИрдВ рдЬреЗрдПрд╕ рднрд╛рд╖рд╛ рдХрд╛ рд╢реМрдХреАрди рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдФрд░ рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рдЖрдХрд░реНрд╖рдХ рд╣реИред рдЪреВрдВрдХрд┐ рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ "рд╡реНрдпрд╛рдпрд╛рдо рдмрд╛рдЗрдХ" рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдореМрдХрд╛ рдорд┐рд▓рд╛ рдерд╛ред рдПрдХ рдардВрдбрд╛ рд╕рд░реНрджрд┐рдпреЛрдВ рдХрд╛ рджрд┐рди, рдореБрдЭреЗ рд╡рд┐рдо рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ рдЧрдИ рдФрд░, рдЗрд╕рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ, рдЬреИрд╕реЗ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╕рдВрджрд░реНрдн рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВ рд╡реАрдЖрдИрдПрдо рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдмрд╣реБрд░реВрдкрддрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред

рдореИрдВ рддреБрд░рдВрдд рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЦреБрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╡рд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рджреВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдХрд╛рдо рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рдо рдореЗрдВ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдмрдирд╛рдирд╛ рдирд╣реАрдВ рдерд╛, рдмрд▓реНрдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдирд╛ рдерд╛ред рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╣рд▓реНрдХрд╛ рдФрд░ рддреЗрдЬ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреЛ "рд▓рдбрд╝рд╛рдИ" рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд▓рд╛рдЬ рдХрд░реЗрдВред


рдЖрдкрдХреЛ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рдиреА рдереА


рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд╢рдмреНрдж рдЬреЛ рд╡рд┐рдо рдХреЗ рдкрд╛рд╕ "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рд╣реИ рдФрд░ рд╣рдо рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЯрд╛рдЗрдкрд┐рдВрдЧ - рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдЗрд╕рдореЗрдВ 6 рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: рдЗрдВрдЯреЗрдЧрд░, рдлреНрд░реИрдХреНрд╢рдирд▓ рдирдВрдмрд░, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕, рдкреЙрдЗрдВрдЯрд░ рдЯреВ рдлрдВрдХреНрд╢рдВрд╕, рдПрд░реЗ, рдПрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡ рдПрд░реЗред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрддрд┐рдо рдкреНрд░рдХрд╛рд░ рд╣реИред рдЬреЗрдПрд╕ рдХреА рддрд░рд╣ рд╣реА рд╕рд╣рдпреЛрдЧреА рд╕рд░рдгрд┐рдпрд╛рдБ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ:
''  ┬л┬╗      let Obj = {'foo': 'bar'} 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрд╛рд░реНрдп рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдЖрдзрд╛рд░ред

рдЪрд░ - рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреБрдЫ рднреА рдирд╣реАрдВ, рд╕рд┐рд╡рд╛рдп рдорд╣рддреНрд╡рдкреВрд░реНрдг "рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░" рдХреЗ - рдПрдХ рдбреЙрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛:
 ''      foo echo Obj.foo 

рд╕реБрд╡рд┐рдзрд╛рдкреВрд░реНрд╡рдХ, рд╡рд╣ рд╢рдмреНрдж рдирд╣реАрдВ!

рдХрд╛рд░реНрдп - рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ "рдСрдмреНрдЬреЗрдХреНрдЯ" рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЬрдм рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рд╕рд╣рдпреЛрдЧреА рд╕рд░рдгреА рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 function! Obj.getFoo() dict return self.foo endfunction 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реАрдзреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рджреГрд╖реНрдЯрд┐ рдирд╣реАрдВ рдЦреЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдорд╛рдирдХ рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдЬреИрд╕реЗ рдХрд┐, рдпрджрд┐ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП - рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХреМрди рд╕реА рд▓рд┐рдкрд┐ рднрд╛рд╖рд╛!

рд╕рд┐рджреНрдзрд╛рдВрдд


рд╡рд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ (рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рд╡рд┐рдо рднрд╛рд╖рд╛ рд▓рд┐рдЦреВрдВрдЧрд╛) рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдпрд╣ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдХреНрдпрд╛ рд╕реЛрдЪрд╛ рд╣реИред


рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 use foo\bar\Class as Class ''   MyClass    Class     foo  bar let MyClass = Class.expand({'foo': '', 'bar': Class}) let obj = new MyClass() call obj.set('prop', 'val') echo obj.get('prop') call obj.set('bar', obj) 


рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рд╣рдо рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХреБрдЫ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдлреВ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╣реЛрддреА рд╣реИ, рдФрд░ рдмрд╛рд░ рд╕рдВрдкрддреНрддрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рдд рдХрдХреНрд╖рд╛ред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЗрд╡рд▓ foo рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдмрд╛рд░ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдпрд╛ рдЗрд╕рдХреЗ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЛ рдмрд╛рд░ рд╕рдВрдкрддреНрддрд┐ (рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП MyClass рд╕рд╣рд┐рдд) рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╣рдо рдмрд╛рд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП MyClass рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдХреНрд▓рд╛рд╕ рдХреНрд▓рд╛рд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП "рд╕реАрдорд┐рдд" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рдЗрд╕рдореЗрдВ рдлреВ рдФрд░ рдмрд╛рд░ рдЧреБрдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдлрд┐рд░ рд╕реЗ MyClass рд╡рд░реНрдЧ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ (рдЬрд╛рд╡рд╛ рдХреЗ рд╕рдорд╛рди)ред

рдЖрдЗрдП рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛, рд╣рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ:
 let obj = new MyClass('val') 


рд╣рдо рдпрд╣рд╛рдВ рддрд░реАрдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдкрд╣рд▓рд╛ рдХрджрдо


рдмреЗрд╢рдХ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдо рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдЙрдЪреНрдЪ рдереЛрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рдХреБрдЫ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ:
 Use D/base/Object "   A     Object let A = Object.expand('A', {'x': 1}) "    A  . function! A.new(x) dict let obj = self._construct() call obj.set('x', a:x) return obj endfunction "   B    A let B = A.expand('B', {'y': Object}) "    B   function! B.new(x, y) dict let obj = self._construct() " ,      call obj.set('x', a:x) call obj.set('y', a:y) return obj endfunction "   let s:a = A.new(2) let s:b = B.new(3, s:a) echo s:b.get('x') "       Object,       echo s:b.get('y') "         echo s:b.get('y').instancedown('A').get('x') 


рдмрд╛рдд рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░ рд╕реЗ рд╢реБрд░реВ рд╣реБрдИ: рдЖрдкрдХреЛ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ рдФрд░ рджреЛ рдореБрдЦреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ _construct:
 let Object = {'class': 'Object'} function! Object.expand(className, properties) dict endfunction function! Object._construct() dict endfunction 


рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╡рд┐рдо рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд╛рдо рдирд╣реАрдВ рд╣реИрдВ, рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рд╡рд░реНрдЧ рдирд╛рдо рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдореЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рд╡рд┐рдо рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдпрд╛ рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрддреА рд╣реИ, рдирдП рд╡рд░реНрдЧ рдФрд░ рдЙрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдирд╛рдо, рдФрд░ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдирдП рд╡рд░реНрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рддрдерд╛рдХрдерд┐рдд рд╡рд░реНрдЧ (рдпрд╛рдиреА, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред _рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рд╡рд┐рдзрд┐ рдмрд╕ рдмреБрд▓рд╛рдпрд╛ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред

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

 function! Object.expand(className, properties) dict let obj = {'class': a:className} "  . "           parent. let obj.parent = self "  . "             . for k in keys(self) let t = type(self[k]) "      if t == 2 let obj[k] = self[k] endif endfor "  . "          . for k in keys(a:properties) "          class  parent,    if k == 'class' || k == 'parent' continue endif let t = type(a:properties[k]) "     ,     if t == 0 || t == 1 || t == 5 let obj[k] = {'value': a:properties[k], 'type': t} "   ,     elseif t == 3 let obj[k] = {'value': deepcopy(a:properties[k]), 'type': t} "   ,        elseif t == 4 "     if has_key(a:properties[k], 'class') let obj[k] = {'value': '', 'type': a:properties[k].class} "     elseif let obj[k] = {'value': a:properties[k], 'type': 4} endif endif endfor return obj endfunction 


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

рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреАред _Construct рд╡рд┐рдзрд┐ рдХреНрд▓рд╛рд╕ рдЧреБрдг рдХреЗ рдорд╛рди рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрдкреА рдХрд░рдХреЗ рдХреНрд▓рд╛рд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдирдХрд▓ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
 function! Object._construct() dict let obj = {} "     let obj.class = self if has_key(self, 'parent') "            let obj.parent = self.parent._construct() "       ,       let obj.parent.child = obj endif for property in keys(self) let type = type(self[property]) "          ,     if type == 2 && property != 'expand' && property != '_construct' && property != 'new' let obj[property] = self[property] "    elseif type == 4 && has_key(self[property], 'type') let propertyType = self[property].type if propertyType == 0 || propertyType == 1 || propertyType == 5 let obj[property] = self[property].value elseif propertyType == 3 let obj[property] = deepcopy(self[property].value) elseif propertyType == 4 if has_key(self[property].value, 'class') let obj[property] = self[property].value._construct() else let obj[property] = deepcopy(self[property].value) endif endif endif endfor return obj endfunction 


рд╡рд┐рд░рд╛рд╕рдд рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд╕реНрддреБ рдХреЛ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ (рд╕рдмрдЬреЗрдХреНрдЯ) рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡реЗ рд╕рднреА рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░рд┐рдЧреНрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ (рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдВ? рдлреВ!)
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдм рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдХреБрдЫ рдЧреБрдг рдкреНрд░рдХрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН: рд╕рдм рдХреБрдЫ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ; рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдХреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рд╕рдмрд╕реЗ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред

рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд░реНрдгрд┐рдд рддрд░реАрдХреЗ рдкреВрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдиреАрдВрд╡ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЗ рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗ:
  1. рдирдП - рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рддрд╛;
  2. рдорд┐рд▓ - рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛;
  3. рд╕реЗрдЯ - рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛;
  4. рд╣реИ - рдХреНрдпрд╛ рд╡рд╕реНрддреБ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рд╣реИ;
  5. Instup - рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдкрджрд╛рдиреБрдХреНрд░рдо (рдкреНрд░рддрд┐рдЧрдорди) рддрдХ рдПрдХ рд╕рдмреЛрдмреЗрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛;
  6. instancedown - рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдкрджрд╛рдиреБрдХреНрд░рдо (рдкреНрд░рдЧрддрд┐) рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╕рдмреЛрдмреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛;
  7. Instof - рдЪрд╛рд╣реЗ рд╡рд╣ рд╡рд╕реНрддреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдХреА рд╣реЛ рдпрд╛ рдЙрд╕рдХреЗ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреАред


рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ:
 let A = Object.expand('A', {'a': 1}) let B = Object.expand('B', {'b': A}) ''    function! B.new(b) dict let obj = self._construct() obj.set('b', b) return obj endfunction let s:a = A.new() call s:a.set('a', 2) let s:b = B.new(s:a) ''   ,     echo s:b.class.class '' B ''   ,      b echo s:b.get('b').class.class '' A ''    b   B.  ,    B       A.     call s:b.set('b', s:b) ''   ,     A echo s:b.get('b').class.class '' A ''    s:a,     a   2 (   ),  1 (   s:b) echo s:b.get('b').get('a') '' 1 ''  ,      b ,       B echo s:b.get('b').instancedown('B').class.class '' B 


рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╣реИ рдирд╛? рдореИрдВ рддрд░реАрдХреЛрдВ рдХреА рд╡рд┐рд╕реНрддреГрдд рд╕реВрдЪреА рдирд╣реАрдВ рджреВрдВрдЧрд╛, рд╡реЗ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЧрд┐рдЯрд╣рдм рдкрд░ рд╣реИрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдСрдкрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛:
  1. рдирдпрд╛ - рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрдорд╛рддрд╛ рдХреНрдпреЛрдВ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдорд╛рдирдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕реНрддрд░ рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рддрдВрддреНрд░ рддрдерд╛рдХрдерд┐рдд рд╡рд░реНрдЧ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ;
  2. рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ - рдХрд╣реАрдВ рднреА рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рджреА рдЧрдИ рд╡рд╕реНрддреБ рдореЗрдВ рд╣реИ рдпрд╛ рд╡рд┐рд░рд╛рд╕рдд рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЙрдЪреНрдЪрддрд░ рд╣реИ, рд╣рдо рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ;
  3. рд╕реЗрдЯ - рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рд╕рдмреЛрдмрд┐рдЬ рдХреЛ рд▓рд┐рдЦреЗрдВред рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдкреНрд░рддрд┐рдЧрдорди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ;
  4. рд╣реИ - рд╕рдм рдХреБрдЫ рднреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд╣рдо рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдФрд░ рдЙрдк-рд╡рд┐рд╖рдп рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ;
  5. рдЙрджрд╛рд╣рд░рдг - рдореВрд▓ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЙрдк-рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдКрдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ; рдпрджрд┐ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ;
  6. instancedown - рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди, рдХреЗрд╡рд▓ рдмрд╛рд▓ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
  7. Instof - рдХреЙрд▓ Instup рдФрд░ рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рд╣реА рд▓реМрдЯреЗрдВред


рдЙрдкрдпреЛрдЧ рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрднреА рддрдХ рдПрдХ рд╕рдордЭрджрд╛рд░ рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ YUI 3 рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ред рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд╛рдлреА рд╕рд░рд▓:
 comm! -nargs=1 Use so $HOME/.vim/ftplugin/vim/<args>.vim 


рд╣рдо рдЙрдкрдпреЛрдЧ рдХрдорд╛рдВрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ .vim / ftplugin / vim / file address.vim рд╢рд╛рдорд┐рд▓ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЬреЛ рд╣реИ:
 Use D/base/Object 

рдпрд╣ .vim / ftplugin / vim / D / base рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд Object.vim рдлрд╝рд╛рдЗрд▓ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдкреНрд░рд╛рдкреНрдд рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдЯреИрдХ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреЛ "рд╕реНрдЯреИрдХ" рдПрдХреНрд╕реЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдиреАрдЪреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
 if exists('Stack') finish endif Use D/base/Object let Stack = Object.expand('Stack', {'_val': [], '_index': 0}) function! Stack.push(el) dict тАж endfunction function! Stack.pop() dict тАж endfunction function! Stack.length() dict тАж endfunction let s:stack = Stack.new() call s:stack.push(1) call s:stack.push(2) call s:stack.push(3) echo s:stack.length() '' 3 echo s:stack.pop() '' 3 echo s:stack.pop() '' 2 echo s:stack.pop() '' 1 echo s:stack.pop() '' ERROR 


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдмрд╣реБрдд рд╕реБрдВрджрд░, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХред Vim рдореЗрдВ рдХреЗрд╡рд▓ 4 рдХрд┐рд▓реЛ рд╡рдЬрди рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ) рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рдиред

рд╕рдиреНрджрд░реНрдн рдФрд░ рд╕рдВрд╕рд╛рдзрди


  1. рдЧрд┐рдЯрд╣рдм рдкрд░рд┐рдпреЛрдЬрдирд╛
  2. "рдЬрд╕реНрдЯ рд╡реАрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ" рдкреБрд╕реНрддрдХ
  3. рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдо рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

Source: https://habr.com/ru/post/In210930/


All Articles