如何迭代文本块

时间:2014-09-27 04:30:28

标签: ruby rspec

我正在MimeTypes类中编写一个迭代内容的方法,并创建一个Hash扩展名作为键,mime类型作为值。这是我的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 个答案:

答案 0 :(得分:1)

您可以像这样使用let():

let(:var_name) { "some string" }

这相当于:

let(:var_name) do
  "some string"
end

Ruby还有一个名为Heredoc的Perl功能,允许你做这样的事情:

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

文本将包含字符串:

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

Heredoc sytnax允许你做一些棘手的事情,比如:

puts(<<END_OF_TEXT)
hello world
goodbye mars
END_OF_TEXT

没有人真正知道你可以在代码中插入<<SOME_UNIQUE_ID所有棘手的地方,所以Heredocs可能会让人很困惑。

在您的示例中,显然正在使用Heredoc语法在块内创建多行字符串。通常,匹配的结束终止符必须单独在一行上而不是缩进。前面的短划线<<-FILE_CONTENT表示匹配的终结符将缩进。

您还可以在标识符周围放置单引号,以创建单引号字符串:

<<'FILE_CONTENT'

就个人而言,我会写这样的例子:

text =<<'FILE_CONTENT'
blah
blah
blah
FILE_CONTENT

let(:mime_content) { text }
  

我不知道如何迭代文本块。

您想如何迭代文本块?按性格?用言语?通过判刑?按行?按段落?有关各种方法,请参阅String类。