2014-09-27 48 views
0

塊我寫這封信裏面MimeTypes類遍歷內容,並創建擴展的關鍵和MIME類型值的Hash的方法。這是我的rspec片段。如何循環文本

let(:mime_content) do 
    <<-FILE_CONTENT 

# Mime type extension 
image/png  png 

image/jpeg jpeg jpg jpe 
    FILE_CONTENT 
    end 
    let(:mime_types) { WebServer::MimeTypes.new(mime_content) } 

我不知道如何迭代文本塊。我不知道<<-FILE_CONTENT做什麼。我假設它正在創建一個文本塊並將其分配給mime_content。請幫忙。

回答

1

您可以使用讓()這樣的:

let(:var_name) { "some string" } 

這相當於:

let(:var_name) do 
    "some string" 
end 

Ruby也有一個Perl的功能,稱爲定界符,它允許你做的東西是這樣的:然後

text = <<END_OF_STRING 
hello world 
goodbye mars 
help 
get lost 
END_OF_STRING 

文本將包含字符串:

"hello world\ngoodbye mars\nhelp\nget lost\n" 

定界符sytnax可以讓你做一些小技巧,比如:

puts(<<END_OF_TEXT) 
hello world 
goodbye mars 
END_OF_TEXT 

沒有人真正知道所有你可以插入到<<SOME_UNIQUE_ID代碼等here文檔可能會相當混亂棘手的地方。

在您的例子,顯然定界符語法被用來創建一個塊內的多行字符串。通常,匹配的結束終止符必須單獨在一行上,而不是縮進。前面的短劃線<<-FILE_CONTENT表示匹配的終止符將縮進。

你也可以把單引號括起來的標識符,以創建一個單引號字符:

<<'FILE_CONTENT' 

就個人而言,我會寫這樣的例子:

text =<<'FILE_CONTENT' 
blah 
blah 
blah 
FILE_CONTENT 

let(:mime_content) { text } 

我不是確定如何迭代文本塊。

你怎麼想遍歷文本塊?按性格?用字?通過判決?按行?按段落?查看各種方法的String類。

+1

謝謝你的解釋。我想逐行迭代。我想出了'.lines.map(&:chomp).each'完成這項工作。 – 2014-09-27 05:06:59

+0

@Kumari Sweta,如果你喜歡效率極其低下的代碼,請與。否則,請嘗試'mime_type.each_line do | line | line.chomp! #do stuff here end'您的方式遍歷文本3次,並在內存中創建whoe文本的副本。我的方式一遍遍閱讀文本,並且不會創建整個文本的副本。 – 7stud 2014-09-27 20:37:13

+0

感謝您的解釋,我會照顧到這一點 – 2014-09-28 00:10:50