summaryrefslogtreecommitdiffhomepage
path: root/mrblib/string.rb
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-03-16 22:18:15 +0900
committerGitHub <[email protected]>2017-03-16 22:18:15 +0900
commit9ecebebf3e12d6d8125a7a24b8ac4e124c7cd98a (patch)
tree079527e7703b3408c9575bc7249905e46d199c67 /mrblib/string.rb
parent47cc5d66e3a2b2b53f7c172aaf4c38baee162556 (diff)
parent4ee79a877728f07c2017ba0a225bf9647bfca22a (diff)
downloadmruby-9ecebebf3e12d6d8125a7a24b8ac4e124c7cd98a.tar.gz
mruby-9ecebebf3e12d6d8125a7a24b8ac4e124c7cd98a.zip
Merge pull request #3510 from ksss/string-each_line
Some update for `String#each_line`
Diffstat (limited to 'mrblib/string.rb')
-rw-r--r--mrblib/string.rb15
1 files changed, 10 insertions, 5 deletions
diff --git a/mrblib/string.rb b/mrblib/string.rb
index 7add360a8..6e55ee341 100644
--- a/mrblib/string.rb
+++ b/mrblib/string.rb
@@ -9,13 +9,18 @@ class String
# and pass the respective line.
#
# 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
- while pos = self.index("\n", offset)
- block.call(self[offset, pos + 1 - offset])
- offset = pos + 1
+ rs_len = rs.length
+ this = dup
+ while pos = this.index(rs, offset)
+ block.call(this[offset, pos + rs_len - offset])
+ offset = pos + rs_len
end
- block.call(self[offset, self.size - offset]) if self.size > offset
+ block.call(this[offset, this.size - offset]) if this.size > offset
self
end