RubyConf 2010: рд░реВрдмреА (I) рдХрд╛ рд╡рд░реНрддрдорд╛рди рдФрд░ рднрд╡рд┐рд╖реНрдп

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд░реВрдмреА рдХреЗ рд▓реЗрдЦрдХ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкрдврд╝реЗ, рдпреБрдХрд┐рд╣рд┐рд░реЛ рдорд╛рддреНрд╕реБрдореЛрддреЛ, рд░реВрдмреАрдХреЛрдирдл 2010 рдкрд░, рдЙрдирдХреЗ рдЬрд╛рдкрд╛рдиреА рднрд╛рд╖рд╛ рдХреЗ рдмреНрд▓реЙрдЧ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖред рдкрд╣рд▓рд╛ рднрд╛рдЧ рдкрд┐рдЫрд▓реЗ рд░реВрдмреА рдХреЙрдиреНрдл рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдЕрд╡рд▓реЛрдХрди рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИред



рдЬрд╛рдкрд╛рдиреА рд╕реЗ рд╡реНрд▓рд╛рджрд┐рдореАрд░ рд╕рджреЛрд╡рдирд┐рдХреЛрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред



рд░реВрдмреА рдХрд╛ рднрд╡рд┐рд╖реНрдп: рд░реВрдмреА 2.0



рдЗрд╕ рдмрд╛рд░ рдореИрдВ рд░реВрдмреА рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдирдП рдлреАрдЪрд░ рдкреЗрд╢ рдХрд░реВрдВрдЧрд╛:



рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрднреА рддрдХ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐:



1 рдиреЛрдЯ рдкреНрд░рддрд┐ред: рдЧреИрд░-рддреБрдЪреНрдЫ рддрдХрдиреАрдХреА рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреЛрд╖реНрдардХ рдореЗрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рдирд╛рдо рдФрд░ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╛ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛ред



рдЯрд╛рдЗрдк


рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг:

рдкреНрд░рдХрд╛рд░, "рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдХреЛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╡реИрдЪрд╛рд░рд┐рдХ рдореЙрдбрд▓" рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред

рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ



рдпрд╣ рд▓рдЧрднрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдорд╛рди рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рдирдпрд╛ рднрд╛рд╖рд╛ рддрддреНрд╡ - рдкреНрд░рдХрд╛рд░ - рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рдЙрдк-рдкреНрд░рдЬрд╛рддрд┐ рд╣реИред



рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЙрдбреНрдпреВрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд┐рд╢реНрд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ [рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ - рдЗрд╕рдХреЗ рдмрд╛рдж рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред]ред рдЪреВрдВрдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рд╕рдорд╛рд╡реЗрд╢ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:



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



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



рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдХрд╛ рдХреНрд░рдо рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдорд┐рд▓рд╛рди рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рддрд░реАрдХреЛрдВ рдХреА рдЦреЛрдЬ рдХрд╛ рдХреНрд░рдо рдЕрдХреНрд╕рд░ рдкреНрд░рддрд┐рд░реВрдкрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



module American attr_accessor :address end module Japanese attr_accessor :address end class JapaneseAmerican include American include Japanese end JapaneseAmerican.new.address # which address? p JapaneseAmerican.ancestors # => [JapaneseAmerican, Japanese, American, Object, Kernel]
      
      





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



рдПрдХ "рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд" рд░реВрдмрд┐рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЬрд╛рдкрд╛рдиреА рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкрддрд╛ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред



рд░реВрдмреА [MRI 1.9] рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рддрд┐рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ "рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рджреЛ рдмрд╛рд░ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛ" (рд▓реЗрдЦрдХ рдиреЛрдЯ: рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ MacRuby рдиреЗ рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рдерд╛ред 1.9 рдореЗрдВ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреЗ рд▓рд┐рдПред YARV рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рдмреАрдЪ рджреЛ рдмрд╛рд░ рджрд┐рдЦрд╛рдИ рди рджреЗред) рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдореВрд▓ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдпрд╣ рдЙрди рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред



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



рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ (рднрд╛рдЧ рдореЗрдВ) рдХреЛ рдорд┐рдХреНрд╕ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдХреНрдпреЛрдВ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐:



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд┐рд╢реНрд░рдг рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдорд┐рд╢реНрд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:

 module American attr_accessor :address end module Japanese attr_accessor :address end class JapaneseAmerican mix American mix Japanese # => address conflict! end
      
      





рдорд┐рд╢реНрд░рдг рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╛рдо рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 class JapaneseAmerican mix American, :address => :us_address mix Japanese, :address => :jp_address end
      
      





рдЕрдм рд╡рд┐рдзрд┐рдпрд╛рдБ, рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╣реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдореЛрдВ рд╕реЗ рдорд┐рд▓реАрдВред



рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВ, рднрд╛рд╖рд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ? рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдЫреЛрдЯрд╛ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред (рдиреЛрдЯ perevред: рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╕рднреА рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐рдпрд╛рдВ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛ рд╕рдХрддреА рд╣реИрдВ, рдЬреИрд╕реЗ "example_variable_defined?") рдХреЗ рд╡рд┐рд╕реНрддреГрдд рдирд╛рдо рд╣реИрдВред



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



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



рд╡рд┐рдзрд┐ рд╕рдВрдпреЛрдЬрди


RubyKaigi рдореЗрдВ, рдорд┐рд╢реНрд░рдг рд╡рд┐рдзрд┐ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛рдиреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрд╣рд╛рдиреА рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ "рд░реИрдк" рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рд╡рд┐рдзрд┐ рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЧреИрд░-рддреБрдЪреНрдЫ рдереА, рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ред



рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдкреНрд░реАрдкреЗрдВрдб рдкрджреНрдзрддрд┐ рд╢реБрд░реВ рдХреА рдЬрд╛рдПред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╡рд╛рд▓ рд╕реБрдирддрд╛ рд╣реВрдВ "рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдорд┐рд╢реНрд░рдг рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпрд╛, рдЕрдм рд╣рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?", рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред



рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП "рдХреНрд▓рд╛рд╕" рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

 module Foo def foo p :before super p :after end end class Bar def foo p :foo end prepend Foo end Bar.new.foo # :before, :foo, :after
      
      





рдЕрдЧрд░ рдлреВ рд╡рд┐рдзрд┐ рдХреЛ рдлреВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ (рдпрд╛ рдореЙрдбреНрдпреВрд▓) рдореЗрдВ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкреНрд░реАрдкреЗрдВрдб рдореЙрдбреНрдпреВрд▓ рдлреВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рдХреЗ рдлреВ рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рдкреЗрдЯ рджреЗрдЧрд╛ред



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



рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдХреЛрдИ рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ T_ICLASS рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рд╕реЗ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред



рдирд╛рдорд┐рдд рддрд░реНрдХ


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



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

 aClass.public_instance_methods (include_super: false)
      
      





рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред



рд░реВрдмреА 1.9 рдореЗрдВ, рдирд╛рдорд┐рдд рддрд░реНрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рддрд░реНрдХ рд╣реИрдВ, рдФрд░ рд╡реНрдпрд╛рдХрд░рдг рд╡рд┐рд╕реНрддрд╛рд░ рдЬреЛ рдЗрд╕ рдПрдЪрдПрдЪ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред (рдиреЛрдЯ рдЕрдиреБрд╡рд╛рдж: рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ 1.9 рдореЗрдВ рдЖрдк рдбреА def a(opts={}); end



рддрд░рд╣ рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ def a(opts={}); end



рдФрд░ рдЗрд╕реЗ a(go: true, what: "string")



рдЬреИрд╕реЗ a(go: true, what: "string")



ред



рдирдИ рд╕реБрд╡рд┐рдзрд╛ 2.0 рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдРрд╕реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:



рдХреЙрд▓ рдХрд░реЗрдВ:

 1.step (by: 2, to: 20) do |i| pi end
      
      





рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 def step (by: step, to: limit) ... end
      
      





рдмрд╛рдж рдореЗрдВ [рд╕рдореБрджрд╛рдп] рд╣реИрд╢ рд░реВрдк рд▓реЗрддрд╛ рд╣реИ, рдирд╛рдо рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдкреНрд░рднрд╛рд╡ рдореЗрдВ, рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкрд░рд┐рд╡рд░реНрддрдиред



рдирд╛рдорд╕реНрдерд╛рди


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



рд░реВрдмреА рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп рдЖрдк рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рддрдХрдиреАрдХ рдХреЛ рдордВрдХреА рдкреИрдЪрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред



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



рдПрдХ рдУрд░, рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ 1 + 2 42 рд╣реЛ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рдХрд╛рд░рдг рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗред



рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдмрдВрдж рджрд╛рдпрд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд░рдЦрдХрд░, рдЖрдк "рдореБрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди" [рдкреИрдЪрд┐рдВрдЧ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛] рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдРрд╕рд╛ "рд╕реНрдХреЛрдк" рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЪрдпрдирдХрд░реНрддрд╛ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреНрд▓рд╛рд╕рдмреЙрдХреНрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рдЗрд╕ рдмрд╛рд░, Maeda рдХреЗ рд╕рд╣рдХрд░реНрдореА рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЪрдпрдирдХрд░реНрддрд╛ рдирд╛рдорд╕реНрдерд╛рди рдХреЛ рдкрд░рд┐рд╢реЛрдзрди рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ:

 class Integer def / (other) return quo (other) end end p 1 / 2 # => (1 / 2)
      
      





рдбрд┐рд╡реАрдЬрди рдСрдкрд░реЗрдЯрд░ (/) рдХрд╛ рдПрдХ рд╕рдорд╛рди рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рдг рдПрдХ рддрд░реНрдХрд╕рдВрдЧрдд рдЕрдВрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдиреЛрдЯ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рддрд░реНрдХрд╕рдВрдЧрдд рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдЖ рдЧрдИ рд╣реИ) рдорд╛рдирдХ рдореИрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдб рдЬреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред



рдпрд╣ рдЕрдзреНрдпрдпрди рдПрдХ рдкрд░рд┐рд╢реЛрдзрди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдирд╛рдо рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ)ред рд╡реНрдпрд╛рдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 module MathN refine Integer do def / (other) return quo (other) end end p 1 / 2 # => (1 / 2) end p 1 / 2 # => 0
      
      





рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реЛрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ред рдпрд╣ рдПрдХ рдмрдбрд╝реА рдЙрдкрд▓рдмреНрдзрд┐ рд╣реИред



рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░, рдЖрдк рдореМрдЬреВрджрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдРрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рднреАрддрд░ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░, MathN 1/2 рддрд░реНрдХрд╕рдВрдЧрдд (1/2), рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ - рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЧрдлрд▓ рд▓реМрдЯрд╛рдПрдЧрд╛ред



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



рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ:

 module Rationalize using MathN p 1 / 2 # => (1 / 2) end p 1 / 2 # => 0
      
      





рдпреБрдХреНрддрд┐рд╕рдВрдЧрдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рднреА рдореИрдерди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢реЛрдзрди рд╣реИред



рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░рд░реНрдердХ рд╣реИ, рддреЛ рдЗрд╕реЗ рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреЗ рднреАрддрд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛: рдЗрд╕ рддрд░рд╣ рд╕реЗ, рд╡рд┐рдзрд┐ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдЬреА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдиреЛрдЯ perevред: рд░реВрдмреА 1.9 рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рд╡рд┐рдзрд┐ рд╡рд░реНрдЧ рдХреА рд╕рджрд╕реНрдп рд╡рд┐рдзрд┐ рдмрди рдЬрд╛рддреА рд╣реИ, рдЕрд░реНрдерд╛рдд, рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдирд╛ рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред)

 class Foo def foo def bar ... end bar # works end def quux bar # does not work end end
      
      





рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди Maeda рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд╛рдлреА рдмрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рд╣реИ; рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд░рд┐рд╡рд░реНрддрди рдЬрд▓реНрджреА рд╕реЗ рдореБрдЦреНрдп рдкреЗрдбрд╝ [рдЯреНрд░рдВрдХ] рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм, рдЖрдк рдЗрд╕ рд╢рд╛рдирджрд╛рд░ рдкреИрдЪ рдХреЗ рд▓рд┐рдП рдорд╛рдПрдбрд╛ рдХреЗ рдПрдХ рд╕рд╣рдпреЛрдЧреА рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



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



All Articles