# Syntax error with blocks

**URL:** <https://www.ruby-forum.com/t/syntax-error-with-blocks/107067>\
**Category:** Ruby\
**Created:** [June 17, 2007, 5:05pm UTC](https://www.ruby-forum.com/t/syntax-error-with-blocks/107067 "2007-06-17T17:05:37Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ole](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/fbc32d/32.png) [@ole](https://www.ruby-forum.com/u/ole)\
**Post date:** [June 17, 2007, 5:05pm UTC](https://www.ruby-forum.com/t/syntax-error-with-blocks/107067/1 "2007-06-17T17:05:37Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ole](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/fbc32d/32.png) [@ole](https://www.ruby-forum.com/u/ole)\
**Post date:** [June 17, 2007, 5:15pm UTC](https://www.ruby-forum.com/t/syntax-error-with-blocks/107067/2 "2007-06-17T17:15:35Z")

</div>

On 2007-06-17 10:05:37 -0500, Oliver S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
said:

> ```
> ^
> 
> ```
> 
> (irb):158: syntax error, unexpected kDO  
> (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@:1(irb)  
irb(main):002:0\> x.call  
foo  
=\> nil

---

<div class="post-metadata">

**Author:** ![ole](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/fbc32d/32.png) [@ole](https://www.ruby-forum.com/u/ole)\
**Post date:** [June 17, 2007, 5:53pm UTC](https://www.ruby-forum.com/t/syntax-error-with-blocks/107067/3 "2007-06-17T17:53:38Z")

</div>

Thanks

---

<div class="post-metadata">

**Author:** ![ole](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/fbc32d/32.png) [@ole](https://www.ruby-forum.com/u/ole)\
**Post date:** [June 17, 2007, 11:32pm UTC](https://www.ruby-forum.com/t/syntax-error-with-blocks/107067/4 "2007-06-17T23:32:22Z")

</div>

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://LearnRuby.com](http://LearnRuby.com)

---

<div class="post-metadata">

**Author:** ![ole](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/fbc32d/32.png) [@ole](https://www.ruby-forum.com/u/ole)\
**Post date:** [June 19, 2007, 3:21am UTC](https://www.ruby-forum.com/t/syntax-error-with-blocks/107067/5 "2007-06-19T03:21:16Z")

</div>

On Jun 18, 3:11 am, ole \_\_ [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![ole](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/fbc32d/32.png) [@ole](https://www.ruby-forum.com/u/ole)\
**Post date:** [June 19, 2007, 10:01am UTC](https://www.ruby-forum.com/t/syntax-error-with-blocks/107067/6 "2007-06-19T10:01:04Z")

</div>

Ahhh very nice. Thanks

---

<div class="post-metadata">

**Author:** ![ole](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/fbc32d/32.png) [@ole](https://www.ruby-forum.com/u/ole)\
**Post date:** [June 18, 2007, 10:11am UTC](https://www.ruby-forum.com/t/syntax-error-with-blocks/107067/7 "2007-06-18T10:11:36Z")

</div>

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.
