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