Last active
November 28, 2016 18:28
-
-
Save maxim/c806779bf2d743ea3adefc08cfff3532 to your computer and use it in GitHub Desktop.
Strange ruby bug: can't put comment after linebreak in method args. Tested in 2.3.2.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def foo \ | |
a: 'a', | |
# comment here is ok | |
b: 'b' | |
puts a, b | |
end | |
foo(a: 'a', b: 'b') # => a\nb |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def foo \ | |
# comment here causes error | |
a: 'a', | |
b: 'b' | |
puts a, b | |
end | |
foo(a: 'a', b: 'b') |
@apeiros Yep, I understand what you mean. Here's another way to illustrate.
puts "foo"\
"bar"
# stdout => foobar
puts "foo"\
# comment
"bar"
# stdout => foo
It's also consistent with leading period, which "reaches" for exactly previous line, and doesn't tolerate comments either:
r =
"foo"
.strip
# comment
.upcase
# => syntax error, unexpected '.', expecting end-of-input
r =
"foo"
.strip \
# comment
.upcase
puts r
# stdout => FOO
r =
"foo"
.strip \
# comment
# comment2
.upcase
# => syntax error, unexpected '.', expecting end-of-input
But I'm curious why \
or leading period wouldn't gain the extra meaning of expecting next/previous line anywhere, bypassing comments.
I see what you mean. Yeah, makes sense to allow \ to skip comments. Especially since you can't use \ in a comment to further continue.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
since \ "escapes" the newline, what ruby sees in 2-broken.rb is:
and that
a: 'a',
on the first line of what ruby considers to be the method body is a syntax error (syntax error, unexpected ':')