Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Help : a scoping question

Reply
Thread Tools

Help : a scoping question

 
 
Michel Demazure
Guest
Posts: n/a
 
      08-21-2009
A meta-programming question. More precisely a scoping problem.

In short, is there a ruby way to execute a parameter-less block with a
given receiver ?

Here below my example : I am manipulating a pattern of rectangular boxes
in a plane, with a tree structure given by enclosure, and want to
describe them by a convenient DSL. I am keeping some parameters from the
real code to give a flavor of the example.


class Box

HORIZ = 1
VERT = 2
FIXED = 4
ADJUST = 8

def initialize(enclosing, flag, columns = [], height = 0)
@enclosing = enclosing
enclosing << self if enclosing
@enclosed = []
...
end

def <<(other)
@enclosed << other
end

def box(params = {}, &block)
newbox = Box.new(self, params[pts], params[:colums] || [],
params[:height] || 0)
block.call(newbox) if block
newbox
end

.....

end # class box

# duplication, part of the problem
def main_box(params ={}, &block)
newbox = Box.new(nil, params[pts], params[:colums] || [],
params[:height] || 0)
block.call(newbox) if block
newbox
end

big_box = main_box pts => VERT do |s|
s.box pts => HORIZ, :colums => [1,2,3,4,5,6,7,8,9], :height => 10
s.box pts => HORIZ do |b|
b.box pts => VERT, :colums => [7,8,9], :height => 90
b.box pts => VERT do |z|
z.box pts => HORIZ | ADJUST, :colums => [1,2,3,4,5,6]
z.box pts => HORIZ do |y|
y.box pts => VERT | FIXED, :colums => [4,5,6], :height => 70
y.box pts => VERT do |x|
x.box pts => HORIZ| FIXED, :colums => [1,2,3], :height => 20
x.box pts => HORIZ | ADJUST,:colums => [1,2,3]
x.box pts => HORIZ | FIXED, :colums => [1,2,3], :height =>35
end
end
end
end
end

The local variables in the blocks could be all the same, and are useless
to the DSL, but they seem necessary to secure the scopes. My question is
: is there a way to write the method 'box' so that it accepts the
simplified DSL without variables :

... box params do
box params do

Apologies for my English.

Michel Demazure
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Joel VanderWerf
Guest
Posts: n/a
 
      08-21-2009
Michel Demazure wrote:
> In short, is there a ruby way to execute a parameter-less block with a
> given receiver ?


pr = proc {p self}
2.instance_eval &pr
=> 2

Is that what you're looking for?

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

 
Reply With Quote
 
 
 
 
Michel Demazure
Guest
Posts: n/a
 
      08-21-2009
Joel VanderWerf wrote:
> Michel Demazure wrote:
>> In short, is there a ruby way to execute a parameter-less block with a
>> given receiver ?

>
> pr = proc {p self}
> 2.instance_eval &pr
> => 2
>
> Is that what you're looking for?


Of course, you're right : "newbox.instance_eval &block if block" works.
Many thanks !

M
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
python newbie - question about lexical scoping Matt Barnicle Python 10 12-02-2007 08:59 PM
scoping question 2b|!2b==? C++ 1 04-21-2007 03:05 AM
A scoping question It's me Python 8 12-28-2004 11:33 PM
Beginner's scoping question Alan Little Python 6 11-12-2004 07:44 PM
JSP, JavaBeans and Forms scoping question. Strange behaviour? Matt S. Java 0 05-04-2004 11:58 AM



Advertisments