2011-12-13 2 views
6

(문자열 # GSUB로 만든)열거 자 개체 란 무엇입니까? 다음과 같이 내가 속성의 배열을

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

내가 이렇게

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

내가 얻을 터미널

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

에서 다음과 같은 출력 열거 자 객체를 출력으로 가져 오는 이유는 무엇일까요? 미리 감사드립니다.

편집 : 대신 attributes[-1].gsub("Photo:", ""), I am doing attributes[-1].gsub("Photo:")의주의하시기 바랍니다 그래서 (I 오류 메시지가 기다리고 있었다) 열거 객체가 여기에 돌아왔다 이유를 알고 싶습니다 무슨 일이 일어나고 있는지.?

루비 - 1.9.2

레일 - 열거자를 반환 GSUB 3.0.7 블록도 번째 인수도가 공급

답변

16

Enumerator 객체는 몇 가지 열거하는 일반적인 방법 제공 - gsub은 매우 유연하기 때문에 next, each, each_with_index, rewind

당신은 여기 Enumerator 객체를 얻고을 :

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

처음 세 경우에는 대체가 즉시 수행되고 새 문자열이 반환됩니다. 그러나 대체 문자열, 대체 해시 또는 대체 블록을 제공하지 않으면 일치하는 문자열 조각을 나중에 사용할 수있게 해주는 Enumerator 개체가 반환됩니다.

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> 
5

. 자세한 내용은 here을 참조하십시오.

제거하려면 두 번째 매개 변수가 필요합니다.

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

또는

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

희망이 도움이!

관련 문제