Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

In Ruby 2.0, String#lines returns an Array, rather than an Enumerator #945

Merged
merged 1 commit into from

2 participants

@Sinjo

Ruby 2.0 has changed the return type of String#lines to Array, from Enumerator. The difference in behaviour between MRI 2.0.0 and JRuby 1.7.4 with the --2.0 argument supplied is:

In MRI 2.0.0-p247:
sinjo@widdershins:~/projects/jruby-file-encoding$ rvm use 2.0.0
Using /home/sinjo/.rvm/gems/ruby-2.0.0-p247

sinjo@widdershins:~/projects/jruby-file-encoding$ ./demo input_file.txt 
["first line\r\n", "second line\r\n", "third line"]
"first line\r\n"

-----

In JRuby 1.7.4 with JRUBY_OPTS=--2.0:
sinjo@widdershins:~/projects/jruby-file-encoding$ rvm use jruby
Using /home/sinjo/.rvm/gems/jruby-1.7.4

sinjo@widdershins:~/projects/jruby-file-encoding$ ./demo input_file.txt 
[#<Enumerator: "first line\r\nsecond line\r\nthird line":lines>]
#<Enumerator: "first line\r\nsecond line\r\nthird line":lines>

Output taken from this gist

@headius headius merged commit 436b5f7 into jruby:master
@headius
Owner

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
Showing with 13 additions and 0 deletions.
  1. +13 −0 core/src/main/java/org/jruby/RubyString.java
View
13 core/src/main/java/org/jruby/RubyString.java
@@ -82,6 +82,7 @@
import static org.jruby.CompatVersion.RUBY1_8;
import static org.jruby.CompatVersion.RUBY1_9;
+import static org.jruby.CompatVersion.RUBY2_0;
import static org.jruby.RubyEnumerator.enumeratorize;
import static org.jruby.anno.FrameField.BACKREF;
import static org.jruby.runtime.Helpers.invokedynamic;
@@ -7179,6 +7180,18 @@ public IRubyObject lines(ThreadContext context, IRubyObject arg, Block block) {
enumeratorize(context.runtime, this, "lines", arg);
}
+ @JRubyMethod(name = "lines", compat = RUBY2_0)
+ public IRubyObject lines20(ThreadContext context, Block block) {
+ return block.isGiven() ? each_lineCommon19(context, block) :
+ enumeratorize(context.runtime, this, "lines").callMethod(context, "to_a");
+ }
+
+ @JRubyMethod(name = "lines", compat = RUBY2_0)
+ public IRubyObject lines20(ThreadContext context, IRubyObject arg, Block block) {
+ return block.isGiven() ? each_lineCommon19(context, arg, block) :
+ enumeratorize(context.runtime, this, "lines", arg).callMethod(context, "to_a");
+ }
+
private IRubyObject each_lineCommon19(ThreadContext context, Block block) {
return each_lineCommon19(context, context.runtime.getGlobalVariables().get("$/"), block);
}
Something went wrong with that request. Please try again.