matt neuburg wrote:
> Some languages have a "with" construction, where undefined methods are
> routed to a designated object. Here's an example from UserTalk:
> 
> with system.startup {
>    string(license)
> }
> 
> UserTalk knows what "string" is, but when it can't find "license" it
> reinterprets it as system.startup.license, which works. In
> UserTalk, you
> can even chain these tests:
> 
> with system.temp, system.startup {
>    string(license)
> }
> 
> That means we try system.temp.license and if that doesn't exist we
> proceed to system.startup.license.
> 
> So my question is: is Ruby amenable to this kind of construction? Is
> there a way to bend the language to that it acts like this? Thx - m.

Something like this?

def with(*objects)
  begin
    yield
  rescue NoMethodError => exception
    o = objects.detect { |_o|
      _o.respond_to? exception.name
    } or raise

    o.send exception.name, *exception.args
  end
end

m = with(Time) do
  "aaa".now
end

p m
Fri Oct 27 10:57:44 PDT 2006