Pertanyaan Ruby: Bagaimana cara menulis metode bang, seperti peta?


Saya ingin menulis beberapa metode Array baru yang mengubah objek panggilan, seperti:

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

... tapi aku ngotot tentang cara melakukan ini. Saya pikir saya butuh otak baru.

Jadi, saya ingin sesuatu seperti ini:

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

peta! hanyalah sebuah contoh, saya ingin menulis yang benar-benar segar tanpa menggunakan yang sudah ada sebelumnya! metode.

Terima kasih!


5
2017-10-05 17:53


asal


Jawaban:


EDIT - Jawaban Diperbarui untuk mencerminkan perubahan pada pertanyaan Anda.

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

foo = [1,2,3,4]

foo.stuff!

p foo #=> ['a',2,3,4]

7
2017-10-05 17:59



def stuff!
  self.something = 'something else'
end

bam, Anda telah memodifikasi objek yang mendasarinya tanpa mengembalikan objek baru


1
2017-10-05 17:59