рдЕрдиреБрдкрдо рдПрдореНрдкрд░рд╕реЗрдВрдб

рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдБ рдХрд┐ рд░реВрдмреА рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдбрд┐рдЬрд╛рдЗрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:



User.all.map &:name #    
      
      





рдХреЗ рдмрдЬрд╛рдп



 User.all.map { |user| user.name }
      
      





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



рдЬрд╛рджреВ # 1ред



рдЬрдм рд░реВрдмреА рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдореЗрдВ рдПрдХ рдПрдореНрдкрд░рд╕реЗрдВрдб (рдФрд░) рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреА рд╣реИ,

рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдмреНрд▓реЙрдХ (рдкреНрд░реЛрдХ) рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:



 a = (1..10).to_a a.map { |n| n*n } # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] l = lambda { |n| n*n } a.map &l # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
      
      







рдЬрд╛рджреВ # 2ред



рдЬрдм рд░реВрдмреА рдПрдХ рдПрдореНрдкрд░рд╕реЗрдВрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреА рд╣реИ, рддреЛ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ #to_proc рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмреНрд▓реЙрдХ рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИред



рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рдореБрдЦреНрдп рдЖрд╢реНрдЪрд░реНрдп рд╣реИ, #to_proc рдХреЛ рд╕рд┐рдВрдмрд▓ рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛, рд╣рдореЗрдВ рдХреЛрдб рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:



 lambda { |x| x.send(self) }
      
      







рдпрд╣реА рд╣реИ, Symbol # to_proc рдареАрдХ рдЙрд╕реА рдмреНрд▓реЙрдХ рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЙрд╕рд╕реЗ рдЙрдореНрдореАрдж рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд░реВрдк рдореЗрдВ рдкреНрд░рддреАрдХ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред



рдпреБрдкреАрдбреАред primerchik



рдпрд╣ рдкреНрд░рддреАрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрджреНрднреБрдд рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ:



 :upcase.to_proc.call "asdad" # => "ASDAD"
      
      







рд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдордЧреНрд░реА



blog.hasmanythrough.com/2006/3/7/symbol-to-proc-shorthand

weblog.raganwald.com/2008/06/what-does-do-when-used-as-unary.html

en.wikibooks.org/wiki/Ruby_Programming/Syntax/Method_Calls#The_ampersand_.28.26.29

m.onkey.org/let-s-start-with-wtf



All Articles