Commit 9ecebebf authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto Committed by GitHub

Merge pull request #3510 from ksss/string-each_line

Some update for `String#each_line`
parents 47cc5d66 4ee79a87
...@@ -9,13 +9,18 @@ class String ...@@ -9,13 +9,18 @@ class String
# and pass the respective line. # and pass the respective line.
# #
# ISO 15.2.10.5.15 # ISO 15.2.10.5.15
def each_line(&block) def each_line(rs = "\n", &block)
return to_enum(:each_line, rs, &block) unless block
return block.call(self) if rs.nil?
rs = rs.to_str
offset = 0 offset = 0
while pos = self.index("\n", offset) rs_len = rs.length
block.call(self[offset, pos + 1 - offset]) this = dup
offset = pos + 1 while pos = this.index(rs, offset)
block.call(this[offset, pos + rs_len - offset])
offset = pos + rs_len
end end
block.call(self[offset, self.size - offset]) if self.size > offset block.call(this[offset, this.size - offset]) if this.size > offset
self self
end end
......
...@@ -341,6 +341,12 @@ assert('String#each_line', '15.2.10.5.15') do ...@@ -341,6 +341,12 @@ assert('String#each_line', '15.2.10.5.15') do
end end
assert_equal list, n_list assert_equal list, n_list
n_list.clear
a.each_line("li") do |line|
n_list << line
end
assert_equal ["first li", "ne\nsecond li", "ne\nthird li", "ne"], n_list
end end
assert('String#empty?', '15.2.10.5.16') do assert('String#empty?', '15.2.10.5.16') do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment