HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В Ruby-коде можно встретить странную конструкцию из амперсанда, соединенного с символом:</p>
1 <p>В Ruby-коде можно встретить странную конструкцию из амперсанда, соединенного с символом:</p>
2 <p>Амперсанд в этом выражении обозначает передачу блока в функцию. Но символ - это не блок. Как работает такой код? Всё дело в приведении типов. У символов определен метод to_proc(), который преобразует символ в блок определенного вида. Он вызывается автоматически в тех случаях, когда данные используются как блоки. Это то же самое, что и интерполяция данных в строку.</p>
2 <p>Амперсанд в этом выражении обозначает передачу блока в функцию. Но символ - это не блок. Как работает такой код? Всё дело в приведении типов. У символов определен метод to_proc(), который преобразует символ в блок определенного вида. Он вызывается автоматически в тех случаях, когда данные используются как блоки. Это то же самое, что и интерполяция данных в строку.</p>
3 <p>В отличие от простых типов данных, преобразование символа в блок работает не очевидно. Проще показать на примере:</p>
3 <p>В отличие от простых типов данных, преобразование символа в блок работает не очевидно. Проще показать на примере:</p>
4 <p>То есть получившийся блок принимает на вход один параметр, у которого затем вызывается метод с именем исходного символа. Такое преобразование не случайно, его создали как раз для удобной работы с функциями высшего порядка:</p>
4 <p>То есть получившийся блок принимает на вход один параметр, у которого затем вызывается метод с именем исходного символа. Такое преобразование не случайно, его создали как раз для удобной работы с функциями высшего порядка:</p>
5 <p>Этот трюк работает даже для операторов, так как в Ruby большинство операторов всего лишь методы:</p>
5 <p>Этот трюк работает даже для операторов, так как в Ruby большинство операторов всего лишь методы:</p>
6  
6