2011-12-13 18 views
6

(Dize # gsub ile oluşturuldu)Enumerator nesnesi nedir? Aşağıdaki gibi ben Bir nitelik dizi var

attributes = ["test, 2011", "photo", "198.1 x 198.1 cm", "Photo: Manu PK Full Screen"] 

bunu yapmak,

artist = attributes[-1].gsub("Photo:") 
p artist 

i olsun terminali

#<Enumerator: "Photo: Manu PK Full Screen":gsub("Photo:")> 

aşağıdaki çıktı Neden bir numaralayıcı nesneyi çıktı olarak alıyorum merak ediyorum? Şimdiden teşekkürler.

EDIT: Lütfen unutmayın, attributes[-1].gsub("Photo:", ""), I am doing attributes[-1].gsub("Photo:") yerine Enumerator nesnesinin neden buraya döndüğünü (bir hata iletisi bekliyordum) ve ne olup bittiğini bilmek ister misiniz?

Ruby - 1.9.2

Raylar - bir sýralayýcý döner gsub 3.0.7 blok veya ikinci bir bağımsız değişken de temin edilir

cevap

16

Bir Enumerator nesne bazı sıralamaların ortak yöntemler sağlar - gsub son derece esnek olduğu için next, each, each_with_index, rewind vb

Burada Enumerator nesneyi alıyoruz:

gsub(pattern, replacement) → new_str 
gsub(pattern, hash) → new_str 
gsub(pattern) {|match| block } → new_str 
gsub(pattern) → enumerator 

İlk üç durumda, ikame hemen gerçekleşebilir ve yeni bir dizge döndürür.

irb(main):022:0> s="one two three four one" 
=> "one two three four one" 
irb(main):023:0> enum = s.gsub("one") 
=> #<Enumerable::Enumerator:0x7f39a4754ab0> 
irb(main):024:0> enum.each_with_index {|e, i| puts "#{i}: #{e}"} 
0: one 
1: one 
=> " two three four " 
irb(main):025:0> 
: Bir yedek dizesi, bir yedek karma veya değiştirmeler için bir blok vermezsen Ama, geri daha sonra çalışmak için dize eşleşen parçalara olsun sağlar Enumerator nesneyi almak
5

. Daha fazla bilgi için here'a bakın.

Bunu kaldırmak için ikinci bir parametreye ihtiyacınız vardır.

attributes[-1].gsub("Photo:", "") 

Ya

attributes[-1].delete("Photo:") 

Umut bu yardımcı olur !!

İlgili konular