[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: implicit string concatenation

Zsban Ambrus

12/22/2004 4:04:00 PM

> irb(main):006:0> puts("foo"
> irb(main):007:1> "bar")
> SyntaxError: compile error
> (irb):7: syntax error
> "bar")
> ^
> (irb):7: syntax error
> from (irb):7

What I find even more wierd is this warning:

irb(main):001:0> $-v=1
=> 1
irb(main):002:0> puts(("foo"
irb(main):003:2> "bar"))
(irb):2: warning: unused literal ignored
bar
=> nil


ambrus


2 Answers

Mark Hubbart

12/22/2004 5:21:00 PM

0

On Thu, 23 Dec 2004 01:03:55 +0900, Zsban Ambrus <ambrus@math.bme.hu> wrote:
> > irb(main):006:0> puts("foo"
> > irb(main):007:1> "bar")
> > SyntaxError: compile error
> > (irb):7: syntax error
> > "bar")
> > ^
> > (irb):7: syntax error
> > from (irb):7
>
> What I find even more wierd is this warning:
>
> irb(main):001:0> $-v=1
> => 1
> irb(main):002:0> puts(("foo"
> irb(main):003:2> "bar"))
> (irb):2: warning: unused literal ignored
> bar
> => nil

I'm not sure what's so weird about that... Putting a newline between
the strings makes them into two separate statements, ruining the
concatenation. The statement above is functionally the same as this:
puts(("foo";"bar"))
With the two string literals being in separate statements, ruby sees
no link between the two statements, so the first literal gets created,
then ignored. With a continued line, or explicit concatenation, it
should and does work.

As for the SyntaxError in the OP's message, this is (apparently)
because ruby sees it as two statements, and you can't have more than
one statement inside the method call parens. Doubling up on them
("puts((foo; bar))" cancels that out.

cheers,
Mark


Zsban Ambrus

12/23/2004 10:52:00 AM

0

On Thu, Dec 23, 2004 at 02:20:40AM +0900, Mark Hubbart wrote:
> The statement above is functionally the same as this:
> puts(("foo";"bar"))

Indeed

> As for the SyntaxError in the OP's message, this is (apparently)
> because ruby sees it as two statements, and you can't have more than
> one statement inside the method call parens.

So that's for the same reason why this
puts(3+
8)
works, but this
puts(3
+8)
does not.

Thx for explainig.

ambrus