I am trying to understand this behavior.

From page 356 of the Pickaxe (2nd ed):

Protected. Can be invoked only by objects of the defining class and its 
subclasses.

If I have

class Foo
...
end

f = Foo.new

Is f not an "object of the defining class"? If so, why should an 
instance method of Foo not be able to call a protected class method?

I'm not looking for an answer of the form "because in class scope, 
self.class.type.object.class # => Object, however in *instance* scope" 
etc. Logically, why should it be this way?

In C++ it makes sense that a static class method cannot call an 
non-static method, since static methods exist even when there are no 
objects of the class in existence. However, they do not limit you on the 
reverse and prevent a non-static method from calling a static method.

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