Недавно я задал вопрос (Equality test on three or more objects), где я пытался определить элегантный способ запуска теста равенства на множестве из трех или более объектов. Одним из решений оказалось, что-то вроде этого:Возможно ли, чтобы необъявленный перечислимый объект мог называть себя внутри блока?
array = [1,1,1,1]
array.all? {|x| x == array.first }
мне интересно, если можно было бы уменьшить это всего лишь одной линии, так что я мог бы сделать что-то , что будет истолковано как этот :
[1,1,1,1].all? {|x| x == [1,1,1,1].first }
#=> true
где-то я могу ссылаться на исходный объект на который вызывается блоком без предварительного объявить, что объект в предыдущей строке. В псевдо-коде, что я пытаюсь сделать что-то вроде этого:
[1,1,1,1].all? {|x| x == object_being_called_on_by_block.first }
#=> true
Я также попытался это, но не получилось:
[1,1,1,1].all? { |x| x == self.first }
Я видел его однажды здесь: Http: // StackOverflow. com/questions/19834086/reference-the-invoking-object-in-the-pass-block-in-ruby, но не смог извлечь большую часть из этого примера. Это решение также кажется другим и более простым. Спасибо –
ahh. поэтому в вашем втором примере вы могли бы использовать ключевое слово 'self', но оно было бы излишним. Попался. –