Иногда мне хочется подобной функции в стандартной библиотеке.Например, имя может быть with
или with_it
(повторение предыдущего кода с новым именем)
class Object
def with_it(&block)
block.call(self)
end
end
Пример использования:
x = [1, 2, 3, 4, 5].map {|x| x * x }.with_it do |list|
head = list.unshift
list << head * 10
list.join " / "
end
В отличие отto:
list = [1, 2, 3, 4, 5].map {|x| x * x }
head = list.unshift
list << head * 10
x = list.join " / "
В то время как последний легче понять, преимущество первого заключается в том, что переменные list
и head
ограничены, и, на мой взгляд, присвоение x
более понятно (присвоение x
должно быть вставлено в последнюю строку кода).Скоупинг был бы выгоден, если бы код был частью более крупного метода.
Таким образом, другой вариант использования with_it
- поместить код в отдельный метод.Например:
def mult_head_and_join(list)
head = list.unshift
list << head * 10
list.join " / "
end
x = mult_head_and_join [1, 2, 3, 4, 5].map {|x| x * x }
Не уверен, с чем здесь заключить, но, думаю, я бы проголосовал за включение with_it в стандартную библиотеку