On 12/2/2010 7:55 AM, Shugo Maeda wrote: > > Could you tell me why > > refine Foo > def bar; end > end > > is good but > > refine Foo do > def bar; end > end > > is not so good? The "refine do ... end" block implies a method call which therefore becomes easily overridable at run time. This means the compiler cannot statically compute refinements unless it just assumed "refine" was never overridden. If refinements are truly meant to be lexically scoped, this should be reflected in the compiler's handling of them. Charles Nutter's post illustrates why this might matter. - Loren