# Binding Blocks? (in Tk, for example)

**URL:** <https://www.ruby-forum.com/t/binding-blocks-in-tk-for-example/61720>\
**Category:** Ruby\
**Created:** [May 26, 2006, 3:39pm UTC](https://www.ruby-forum.com/t/binding-blocks-in-tk-for-example/61720 "2006-05-26T15:39:23Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mat\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ce7236/32.png) [@Mat\_S](https://www.ruby-forum.com/u/Mat_S)\
**Post date:** [May 26, 2006, 3:39pm UTC](https://www.ruby-forum.com/t/binding-blocks-in-tk-for-example/61720/1 "2006-05-26T15:39:23Z")

</div>

So I was playing with ruby-tk and this syntax really suprised me:

TkLabel.new {  
text “Hello, World”  
pack …  
}

‘text’ isn’t available outside the block, so I assume the function is  
getting evaulated in TkLabel’s scope?

How does TkLabel pull the block into it’s internal scope?

Thanks,  
Mat

---

<div class="post-metadata">

**Author:** ![Mat\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ce7236/32.png) [@Mat\_S](https://www.ruby-forum.com/u/Mat_S)\
**Post date:** [May 26, 2006, 3:42pm UTC](https://www.ruby-forum.com/t/binding-blocks-in-tk-for-example/61720/2 "2006-05-26T15:42:44Z")

</div>

> > > > > “M” == Mat S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

M\> How does TkLabel pull the block into it’s internal scope?

it use instance\_eval

Guy Decoux

---

<div class="post-metadata">

**Author:** ![Mat\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ce7236/32.png) [@Mat\_S](https://www.ruby-forum.com/u/Mat_S)\
**Post date:** [May 26, 2006, 3:48pm UTC](https://www.ruby-forum.com/t/binding-blocks-in-tk-for-example/61720/3 "2006-05-26T15:48:52Z")

</div>

On May 26, 2006, at 9:40 AM, ts wrote:

> > > > > > “M” == Mat S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:
> 
> M\> How does TkLabel pull the block into it’s internal scope?
> 
> it use instance\_eval

Can you give a code example or documentation page? I can’t figure  
out how to use instance\_eval with a Proc or yield…  
-Mat

---

<div class="post-metadata">

**Author:** ![Mat\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ce7236/32.png) [@Mat\_S](https://www.ruby-forum.com/u/Mat_S)\
**Post date:** [May 26, 2006, 4:01pm UTC](https://www.ruby-forum.com/t/binding-blocks-in-tk-for-example/61720/4 "2006-05-26T16:01:41Z")

</div>

On May 26, 2006, at 9:52 AM, ts wrote:

> > > > > > “M” == Mat S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:
> 
> M\> Can you give a code example or documentation page?
> 
> [code ommited]

That example wasn’t quite what I meant, but I found it myself.  
Incase anyone else was following and is interested, here’s the sort  
of syntax I was curious about:

class MyClass  
def initialize &block  
instance\_eval &block  
end

def foo  
puts “hi”  
end  
end

MyClass.new { foo }

Thanks for pointing me in the right direction, Guy.  
-Mat

---

<div class="post-metadata">

**Author:** ![Mat\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ce7236/32.png) [@Mat\_S](https://www.ruby-forum.com/u/Mat_S)\
**Post date:** [May 26, 2006, 3:55pm UTC](https://www.ruby-forum.com/t/binding-blocks-in-tk-for-example/61720/5 "2006-05-26T15:55:08Z")

</div>

> > > > > “M” == Mat S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

M\> Can you give a code example or documentation page?

moulon% cat b.rb  
#!/usr/bin/ruby  
class TkLabel  
def text(\*args)  
puts “text #{args}”  
end

def pack(\*args)  
puts “pack #{args}”  
end  
end

TkLabel.new.instance\_eval {  
text(1, 2)  
pack(3, 4)  
}  
moulon%

moulon% ./b.rb  
text 12  
pack 34  
moulon%

Guy Decoux
