How to call a class method via the singleton if it exists

I want to call a class level method from the the instance level, but I
need it to go through the singeton if it exists. Here is the most basic
example:

class X
def self.f ; “A” ; end
def g ; self.class.f ; end
end

x = X.new
x.g #=> “A”

def x.f; “B”; end
x.g #=> “A”

How do I get the last to return “B”? I know I could use
‘(class<<self;self;end)’ instead of ‘self.class’, but that will create
a singelton even if doesn’t exist, which seems very wasteful. Yet I
don’t recall any (non-hack) way to detect if a singleton is defined. Is
there?

It would be nice if there was a reference with which we could call up
through the class level like this.

T.

Hi,

At Sun, 19 Nov 2006 01:00:15 +0900,
Trans wrote in [ruby-talk:225642]:

I want to call a class level method from the the instance level, but I
need it to go through the singeton if it exists. Here is the most basic
example:

If I were you:

class X
def self.f ; “A” ; end
def f; self.class.f; end
def g ; f ; end