Bug: multiline ruby expressions with parens

A

Alex Shulgin

Hi,

Anyone aware of this bug?

$ cat expr-bug.rb
a = (2
+ 2) / 2
p a

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

Joel VanderWerf

Alex said:
Hi,

Anyone aware of this bug?

$ cat expr-bug.rb
a = (2
+ 2) / 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.)
 
J

Jim Cochrane

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.)

I was wondering what that had to do with:

a = (2
+ 2) / 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?

--
 
E

Eric Hodel

Hi,

Anyone aware of this bug?

$ cat expr-bug.rb
a = (2
+ 2) / 2
p a

a = (2 \
+ 2) / 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.
 
J

Joel VanderWerf

Jim said:
I was wondering what that had to do with:

a = (2
+ 2) / 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'

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.
 
A

Alex Shulgin

Anyone aware of this bug?
$ cat expr-bug.rb
a = (2
+ 2) / 2
p a
a = (2 \
+ 2) / 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.

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. ;-)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,066
Latest member
VytoKetoReviews

Latest Threads

Top