[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Syntax error with blocks

Oliver Saunders

6/17/2007 3:06:00 PM

OK guys, wtf am I doing wrong here?
The manual says I should be able to do this.

=======================

irb(main):150:0> { puts 'foo' }
SyntaxError: compile error
(irb):150: syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or
'('
{ puts 'foo' }
^
(irb):150: syntax error, unexpected '}', expecting $end
from (irb):150
from :0
irb(main):151:0> { puts('foo') }
SyntaxError: compile error
(irb):151: odd number list for Hash
from (irb):151
from :0
irb(main):158:0> do puts 'foo' end
SyntaxError: compile error
(irb):158: syntax error, unexpected kDO
do puts 'foo' end
^
(irb):158: syntax error, unexpected kEND, expecting $end
from (irb):158
from :0
irb(main):160:0> do; puts 'foo'; end
SyntaxError: compile error
(irb):160: syntax error, unexpected kDO
do; puts 'foo'; end
^
(irb):160: syntax error, unexpected kEND, expecting $end
from (irb):160
from :0

--
Posted via http://www.ruby-....

5 Answers

BDB

6/17/2007 3:11:00 PM

0

On 2007-06-17 10:05:37 -0500, Oliver Sauders <oliver.saunders@gmail.com> said:

> OK guys, wtf am I doing wrong here?
> The manual says I should be able to do this.
>
> =======================
>
> irb(main):150:0> { puts 'foo' }
> SyntaxError: compile error
> (irb):150: syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or
> '('
> { puts 'foo' }
> ^
> (irb):150: syntax error, unexpected '}', expecting $end
> from (irb):150
> from :0
> irb(main):151:0> { puts('foo') }
> SyntaxError: compile error
> (irb):151: odd number list for Hash
> from (irb):151
> from :0
> irb(main):158:0> do puts 'foo' end
> SyntaxError: compile error
> (irb):158: syntax error, unexpected kDO
> do puts 'foo' end
> ^
> (irb):158: syntax error, unexpected kEND, expecting $end
> from (irb):158
> from :0
> irb(main):160:0> do; puts 'foo'; end
> SyntaxError: compile error
> (irb):160: syntax error, unexpected kDO
> do; puts 'foo'; end
> ^
> (irb):160: syntax error, unexpected kEND, expecting $end
> from (irb):160
> from :0

A code block is not a valid statement. If you want to create a Proc
object, use lambda.

irb(main):001:0> x = lambda { puts 'foo' }
=> #<Proc:0x0035393c@(irb):1>
irb(main):002:0> x.call
foo
=> nil

--
H. Asari

Eric I.

6/17/2007 9:26:00 PM

0

The other thing to keep in mind is that blocks are parameters passed
into methods, so they're always associated with a method call. For
example:

10.times { puts 'foo' }

The block is a parameter to the times method that is being called on
the Integer 10.

Even in Banzai's example:

x = lambda { puts 'foo' }

The block is passed to a method named lambda that returns a Proc of
the block passed in.

Eric
----
Are you interested in on-site Ruby training that uses well-designed,
real-world, hands-on exercises? http://Lea...

On Jun 17, 11:05 am, Oliver Sauders <oliver.saund...@gmail.com> wrote:
> OK guys, wtf am I doing wrong here?
> The manual says I should be able to do this.
>
> =======================
>
> irb(main):150:0> { puts 'foo' }
> SyntaxError: compile error
> (irb):150: syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or
> '('
> { puts 'foo' }


Oliver Saunders

6/18/2007 8:12:00 AM

0

Cool. I'm guessing something like this:

1.times { puts 'foo' }

or

lamba { puts 'foo' }.call

is never really used but could be used to achieve block scope.

--
Posted via http://www.ruby-....

Rubén Medellín

6/19/2007 1:16:00 AM

0

On Jun 18, 3:11 am, ole __ <oliver.saund...@gmail.com> wrote:
> Cool. I'm guessing something like this:
>
> 1.times { puts 'foo' }
>
> or
>
> lamba { puts 'foo' }.call
>
> is never really used but could be used to achieve block scope.


If you want a more block like behavior, use begin/end

begin
puts 'Hello from block'
end

Oliver Saunders

6/19/2007 8:01:00 AM

0

Ahhh very nice. Thanks

--
Posted via http://www.ruby-....