рд░реВрдмреА 2.1 рд╕реЗ рд╣рдо рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ, рд░реВрдмреА рд╕рдореБрджрд╛рдп рдХреЗ рдкреНрд░рдореБрдЦ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрд┐рди рд╣рд╛рд╕реЗ рдиреЗ рд░реВрдмреА 2.1 рдХреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╕рдВрд╕реНрдХрд░рдг рдХреА рдШреЛрд╖рдгрд╛ рдкрд░ рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рд╕рдВрд╕реНрдХрд░рдг 2.0 рдФрд░ 2.1 рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрдорд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдмреЗрд╣рддрд░ - рд░реВрд╕реА рдореЗрдВред

рдирд╛рдпрдм: рдмреЗрд╢рдХ, рд░реВрдмреА 2.1 рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╕рднреА рдорд╣рд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ - 2.0ред рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╢реЛрдзрди рддрдВрддреНрд░


рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рд░реВрдмреА 2.0 рдореЗрдВ рдПрдХ рдкрд░рд┐рд╢реЛрдзрди рддрдВрддреНрд░ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдерд╛, рдЗрд╕рд▓рд┐рдП, рд╕рдВрд╕реНрдХрд░рдг 2.0 рдореЗрдВ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреБрдЫ рд╕реАрдорд┐рдд рдереА рдФрд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдереАред

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

module Foo refine String do def foo self + "foo" end end end using Foo puts "bar".foo 

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд╣рд░, String рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг foo рд╡рд┐рдзрд┐ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрдВрдЧреЗред

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

 module Foo refine String do def foo self + "foo" end end end module Bar using Foo puts "bar".foo end 

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрддрд┐-рдЙрддреНрд╕рд╛рд╣реА рдкрд░рд┐рд╢реЛрдзрди рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рд░реВрдмреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╢реЛрдзрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рджрд╢рдорд▓рд╡ рд╢рд╛рдмреНрджрд┐рдХ


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

 irb(main):001:0> 0.1 * 3 => 0.30000000000000004 

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

рд░реВрдмреА рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рджрд╢рдорд▓рд╡ рдФрд░ рддрд░реНрдХрд╕рдВрдЧрдд рдЕрдВрд╢реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрдп r рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ:

 irb(main):001:0> 0.1r => (1/10) irb(main):002:0> 0.1r * 3 => (3/10) 

рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рддрд╛рд░


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

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрдерд┐рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

 class Foo BAR = "bar" def bar?(input) input == BAR end end 

рдЕрдХреНрд╕рд░, рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рд▓рд╛рдЗрди рдлреНрд░реАрдЬрд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлреНрд░реАрдЬрд╝ рдХрд░рдирд╛ рд░реВрдмреА рдХреЛрдб рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ:

 class Foo BAR = "bar".freeze def bar?(input) input == BAR end end 

рдпрд╣ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рдФрд░ рднрд╛рд░реА рд▓рдЧрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд░реВрдмреА 2.1 рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

 class Foo def bar?(input) input == "bar"f end end 

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

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд╛рди рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 class Foo def bar?(input) input == %q{bar}f end end 

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, arrix рдФрд░ hashes рдореЗрдВ рдкреНрд░рддреНрдпрдп f рд▓рдЧрд╛рдиреЗ рдХрд╛ рдкреНрд░рд╢реНрди рдЦреБрд▓рд╛ рд░рд╣рддрд╛ рд╣реИред

рдЕрдирд┐рд╡рд╛рд░реНрдп рдХреБрдВрдЬреА рддрд░реНрдХ


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

 def foo(a: 10) puts a end foo(a: 20) # 20 foo # 10 

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

 def foo(a:) puts a end foo(a: 20) # 20 foo # ArgumentError: missing keyword: a 

рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛ рд░рд┐рдЯрд░реНрди рд╡рд┐рдзрд┐ рдирд╛рдо


рд░реВрдмреА рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, def рд░рд┐рдЯрд░реНрди nil рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛ред

 def foo() end # => nil 

рдЕрдм рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд┐рдзрд┐ рдирд╛рдо рдПрдХ рдкреНрд░рддреАрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ:

 def foo() end # => :foo 

рдпрд╣ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯреНрд░рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ private рдкрджреНрдзрддрд┐ рддрд░реНрдХ рд▓реЗ рд╕рдХрддреА рд╣реИ?

 #     foo class Foo def foo end private :foo #  bar   def bar end end 

рдЕрдм рд╡рд╣ рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рдЬреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 #     foo  bar class Foo private def foo end private \ def bar end def baz end end 

рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реЗ рдПрдХреНрд╕реНрдЯреНрд░рд╛ рдмрд╛рдЗрдЯреНрд╕ рдирд┐рдХрд╛рд▓рдирд╛


рдЕрдм рд░реВрдмреА рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ:

 some_string.scrub("") 

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

StringScanner рдХреИрдкреНрд╢рди рдирд╛рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ


рдХрдИ рд▓реЛрдЧ рдорд╛рдирдХ рднрд╛рд╖рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ StringScanner рд╡рд░реНрдЧ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрд▓реНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рдирд╛рддреНрд░рд╛ 2.0 рд╡рд╣реА рдХрд░реЗрдЧреАред

рд╕рдВрд╕реНрдХрд░рдг 1.9 рдореЗрдВ рдирд╛рдорд┐рдд рдХреИрдкреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди StringScanner рдиреЗ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛:

 require 'strscan' s = StringScanner.new("foo") s.scan(/(?<bar>.*)/) puts s[:bar] 

рд░реВрдмреА 2.0 рдореЗрдВ, рдРрд╕рд╛ рдХреЛрдб рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ:

 TypeError: no implicit conversion of Symbol into Integer 

рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рд░реВрдмреА 2.1 рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛:

 foo 

рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рдЕрдм рдЖрдк Socket.getifaddrs рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 require 'socket' Socket.getifaddrs.each do |i| puts "#{i.name}: #{i.addr.ip_address}" if i.addr.ip? end 

рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 lo0: fe80::1%lo0 lo0: 127.0.0.1 lo0: ::1 en0: fe80::1240:f3ff:fe7e:594e%en0 en0: 192.168.178.30 en2: fe80::3e07:54ff:fe6f:147a%en2 

рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рдХрд╛рдо


рд░реВрдмреА 2.1 рддреЗрдЬреА рд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдЬрдм Bignum рд╡рд░реНрдЧ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ 128-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреАрдПрдирдпреВ рдорд▓реНрдЯреАрдкрд▓ рдкреНрд░рд┐рд╕рд┐рдЬрди рдЕрд░рд┐рдердореЗрдЯрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИред

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрджрд▓ рдЬрд╛рддреА рд╣реИ


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

RGenGC


рд░реВрдмреА рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирдИ рдкреАрдврд╝реА-рдЖрдзрд╛рд░рд┐рдд рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рддреЗрдЬреА рд╕реЗ рд╣реЛрдЧрд╛ред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, "рд░реВрдХ рджреБрдирд┐рдпрд╛ - рдирд┐рд╢рд╛рди - рдЭрд╛рдбреВ" рдпреЛрдЬрдирд╛ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдПрдХ рд░реВрдврд╝рд┐рд╡рд╛рджреА рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреБрд░рд╛рдиреЗ рдХрд▓реЗрдХреНрдЯрд░ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣рд░реА рд░реВрдмреА рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

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

рдирдпрд╛ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╛рд╣рдХ рдХреЗрд╡рд▓ рд╣рд▓реНрдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

RubyGems рдЕрдкрдбреЗрдЯ


RubyGems рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 2.2.0 рдХрд╛ рдЕрджреНрдпрддрди рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ, рдЬреЛ рдХрдИ рдЫреЛрдЯреЗ рд╕реБрдзрд╛рд░ рд▓рд╛рддрд╛ рд╣реИред

рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ


рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рд╛рд▓рд┐рдпрд╛ рд░рд┐рд▓реАрдЬрд╝ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles