Рубиновый блок и не заключенные в скобки аргументы

ruby parentheses

1828 просмотра

1 ответ

Я извлек простой пример:

require 'pp'
x = 1..3
pp x.map do |i| {:value => i, :double => (i*2)} end
pp x.map { |i| {:value => i, :double => (i*2)} }

pp(x.map do |i| {:value => i, :double => (i*2)} end)
pp(x.map { |i| {:value => i, :double => (i*2)} })

Мне интересно, почему первый pp производит:

[1, 2, 3]

Пока все одеры дают:

[{:value=>1, :double=>2}, {:value=>2, :double=>4}, {:value=>3, :double=>6}]

Я предполагаю, что это как-то связано с приоритетом оператора. Где я могу найти хорошее объяснение?

Автор: rkj Источник Размещён: 12.11.2019 09:51

Ответы (1)


14 плюса

Решение

Это потому что ты звонишь

pp x.map

и передача блока в pp (который игнорирует его)

Как объяснено в книге по программированию на Ruby

Брекеты имеют высокий приоритет; до имеет низкий приоритет

Таким образом, фигурные скобки фактически привязываются к ближайшему к ним вызову функции (x.map), тогда как действительно привязываются к самому дальнему (pp). Это немного упрощенно, но это должно объяснить эту ситуацию

Автор: Gareth Размещён: 07.01.2009 12:39
Вопросы из категории :
32x32