рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ, рд░реВрдмреА рд╕рдореБрджрд╛рдп рдХреЗ рдкреНрд░рдореБрдЦ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрд┐рди рд╣рд╛рд╕реЗ рдиреЗ рд░реВрдмреА 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)
рдШреЛрд╖рд┐рдд рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд░реВрдмреА 2.1 рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдореБрдЦреНрдп рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
def foo(a:) puts a end foo(a: 20)
рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛ рд░рд┐рдЯрд░реНрди рд╡рд┐рдзрд┐ рдирд╛рдо
рд░реВрдмреА рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ,
def
рд░рд┐рдЯрд░реНрди
nil
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛ред
def foo() end
рдЕрдм рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд┐рдзрд┐ рдирд╛рдо рдПрдХ рдкреНрд░рддреАрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ:
def foo() end
рдпрд╣ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЯреНрд░рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐
private
рдкрджреНрдзрддрд┐ рддрд░реНрдХ рд▓реЗ рд╕рдХрддреА рд╣реИ?
рдЕрдм рд╡рд╣ рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рдЬреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реЗ рдПрдХреНрд╕реНрдЯреНрд░рд╛ рдмрд╛рдЗрдЯреНрд╕ рдирд┐рдХрд╛рд▓рдирд╛
рдЕрдм рд░реВрдмреА рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ:
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 рдХрд╛ рдЕрджреНрдпрддрди рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ, рдЬреЛ рдХрдИ рдЫреЛрдЯреЗ рд╕реБрдзрд╛рд░ рд▓рд╛рддрд╛ рд╣реИред
рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рд╛рд▓рд┐рдпрд╛ рд░рд┐рд▓реАрдЬрд╝ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред