Руби: Как написать метод взрыва, как карта? - PullRequest
6 голосов
/ 05 октября 2011

Я хотел бы написать несколько новых методов Array, которые изменяют вызывающий объект, например так:

a = [1,2,3,4]
a.map!{|e| e+1}
a = [2,3,4,5]

... но я не понимаю, как это сделать.Я думаю, что мне нужен новый мозг.

Итак, я бы хотел что-то вроде этого:

class Array
  def stuff!
    # change the calling object in some way
  end
end

карта!Это всего лишь пример, я хотел бы написать совершенно новый, не используя каких-либо ранее существующих!методы.

Спасибо!

Ответы [ 2 ]

7 голосов
/ 05 октября 2011

РЕДАКТИРОВАТЬ - Обновлен ответ, чтобы отразить изменения в вашем вопросе.

class Array
  def stuff!
        self[0] = "a"
  end
end

foo = [1,2,3,4]

foo.stuff!

p foo #=> ['a',2,3,4]
1 голос
/ 05 октября 2011
def stuff!
  self.something = 'something else'
end

bam, вы изменили базовый объект, не возвращая новый объект

...