[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

gets gets

John Joyce

3/26/2007 8:18:00 AM

I'm a little surprised at this.
In irb, I tried puts gets gets.
Why? I don't know.
but basically, gets gets, seems to almost act like a heredoc!
myString = gets gets
puts myString

2 Answers

James Gray

3/26/2007 3:25:00 PM

0

On Mar 26, 2007, at 3:17 AM, John Joyce wrote:

> I'm a little surprised at this.
> In irb, I tried puts gets gets.
> Why? I don't know.
> but basically, gets gets, seems to almost act like a heredoc!
> myString = gets gets
> puts myString

It's not surprising at all. First, let's insert the parentheses so
we can see it as Ruby does:

puts(gets(gets()))

Now we see that the right-most gets() call must be resolved first.
Assuming you enter the String "END", that will be passed to the left-
most gets() call as a parameter.

The parameter to gets() is an input record divider, so it will read
ahead until it encounters "END" instead of the traditional "\n".
This is the heredoc-like behavior you are seeing.

The result of the second gets() is then printed by puts().

Hope that explains what you are seeing.

James Edward Gray II


John Joyce

3/26/2007 4:01:00 PM

0

Excellent explanation!
Perfectly clear.

On Mar 27, 2007, at 12:24 AM, James Edward Gray II wrote:

> On Mar 26, 2007, at 3:17 AM, John Joyce wrote:
>
>> I'm a little surprised at this.
>> In irb, I tried puts gets gets.
>> Why? I don't know.
>> but basically, gets gets, seems to almost act like a heredoc!
>> myString = gets gets
>> puts myString
>
> It's not surprising at all. First, let's insert the parentheses so
> we can see it as Ruby does:
>
> puts(gets(gets()))
>
> Now we see that the right-most gets() call must be resolved first.
> Assuming you enter the String "END", that will be passed to the
> left-most gets() call as a parameter.
>
> The parameter to gets() is an input record divider, so it will read
> ahead until it encounters "END" instead of the traditional "\n".
> This is the heredoc-like behavior you are seeing.
>
> The result of the second gets() is then printed by puts().
>
> Hope that explains what you are seeing.
>
> James Edward Gray II
>
>