I may really be misremembering the with statement from Pascal, but, as I 
recall it was more of a namespace / shortcut kind of thing.

For example:

If you have a data structure named Person, which has a bunch of fields within 
it, like FirstName, LastName, Address, ...

You could either assign data to those fields with syntax something like (that 
was a long time ago, and I'm getting old):

Person.FirstName := William
Person.LastName := Smith
...

or you could use the with statement, something like this:

with Person begin
FirstName := William
LastName := Smith
...
end

(Sorry about the syntax errors that I know must be there--like I said, it was 
a long time ago.  Oh, yeah--semicolons!  And keywords in all caps!  Forgetting 
can be good ;-)

I guess my point is, in these discussions about finding a way to simulate the 
Pascal "with" statement in Ruby, it doesn't seem like you (a very generic 
you) are targetting the with functionality from Pascal.

On the other hand, I suspect there must be ways of doing that in Ruby--I just 
can't think of those atm.

Randy Kramer

On Tuesday 23 October 2007 01:48 pm, Pete Elmore wrote:
> On 21/10/2007, Dan Yoder <dan / zeraweb.com> wrote:
> > module Kernel
> >   def with(object,&block)
> >     object.instance_eval &block
> >   end
> > end
> >
> > with([1,2,3]) { length } # => 3
> 
> You could even do something like this:
> 
> module Kernel
>   def with_block(*args, &block)
>     send(*args) { |obj| obj.instance_eval &block }
>   end
> end
> 
> ['asdf', 'jkl', 'semicolon'].with_block(:map) { length } # => [4, 3, 9]
> 
> That would allow something like this:
> <% with_block(:form_for, :user, @user) { %>
>   <%= text_field :name %>
>   <%= text_field :email %>
>   <%= password_field :password %>
> <% } %>
> 
> It may or may not be useful, but it's fun.
> 
>