Bug: multiline ruby expressions with parens

Hi,

Anyone aware of this bug?

$ cat expr-bug.rb
a = (2

    1. / 2
      p a

a = (2 \

    1. / 2
      p a
      $ ruby expr-bug.rb
      1
      2
      $ ruby --version
      ruby 1.8.6 (2008-03-03 patchlevel 114) [x86_64-linux]

Alex S. wrote:

Hi,

Anyone aware of this bug?

$ cat expr-bug.rb
a = (2

    1. / 2
      p a

AFAIK not a bug. It’s because parens can contain two or more
expressions, separated by either newlines or semicolons.

x = 5

a = (x+=1
x + 2) / 2
p a # ==> 4

#equiv to:
a = (x+=1; x + 2) / 2
p a # ==> 4

(I’m not advocating either of the above forms, FWIW.)

On 2008-04-20, Joel VanderWerf [email protected] wrote:

AFAIK not a bug. It’s because parens can contain two or more
p a # ==> 4

(I’m not advocating either of the above forms, FWIW.)

I was wondering what that had to do with:

a = (2

    1. / 2

until I realized (I think), after experimenting with irb that you are
implying that the above is equivalent to:

a = (2;
+2) / 2

which is the same as ‘a = (+2) / 2’ → ‘a = 2/2’ → a = 1

but:

a = (2 +
2) / 2

is the same as ‘a = (2 + 2) / 2’ → ‘a = 4 / 2’

Is my understanding correct?

Jim C. wrote:

AFAIK not a bug. It’s because parens can contain two or more
p a # ==> 4
implying that the above is equivalent to:

is the same as ‘a = (2 + 2) / 2’ -> ‘a = 4 / 2’

Right. I should have said that the expression

  • 2

is treated as applying the unary operator #+ to the integer 2.

Be careful with irb… sometimes it’s a little different from ruby.

On Apr 21, 11:39 am, Eric H. [email protected] wrote:

    1. / 2

This is not a bug. Newlines are significant in ruby.

Yes, I realize now.

But I’d better expect a syntax error like `expecting ‘)’, but found
newline’. Instead of that, the code runs but produces quite
unexpected results and the problem isn’t easy to spot if you are not
familiar with this issue.

I think I can get used to break lines after the operator or use a
backslash… My problem is that I’ve already used to break lines
before operator in C. :wink:

On Apr 20, 2008, at 13:25 PM, Alex S. wrote:

    1. / 2
      p a
      $ ruby expr-bug.rb
      1
      2
      $ ruby --version
      ruby 1.8.6 (2008-03-03 patchlevel 114) [x86_64-linux]

This is not a bug. Newlines are significant in ruby.