Dynamic finding of missing constants.

O

Ola Bini

Hi.

I'm doing some slightly interesting things with Ruby, and I wanted to know
of there's a language way of interrupting the process for finding a
Constant name, like the method_missing method. The closest thing I've been
able to work out is to rescue the NameError at some toplevel, but this is
not transparent enough for me. Anyone have good any good suggestions?

Regards
Ola Bini
 
J

James Edward Gray II

Hi.

I'm doing some slightly interesting things with Ruby, and I wanted
to know of there's a language way of interrupting the process for
finding a Constant name, like the method_missing method.

Yep, const_missing().

James Edward Gray II
 
T

ts

O> I'm doing some slightly interesting things with Ruby, and I wanted to know
O> of there's a language way of interrupting the process for finding a
O> Constant name, like the method_missing method.

You have Module#const_missing

moulon% ri Module#const_missing
--------------------------------------------------- Module#const_missing
mod.const_missing(sym) => obj
------------------------------------------------------------------------
Invoked when a reference is made to an undefined constant in _mod_.
It is passed a symbol for the undefined constant, and returns a
value to be used for that constant. The following code is a (very
bad) example: if reference is made to an undefined constant, it
attempts to load a file whose name is the lowercase version of the
constant (thus class +Fred+ is assumed to be in file +fred.rb+). If
found, it returns the value of the loaded class. It therefore
implements a perverse kind of autoload facility.

def Object.const_missing(name)
@looked_for ||= {}
str_name = name.to_s
raise "Class not found: #{name}" if @looked_for[str_name]
@looked_for[str_name] = 1
file = str_name.downcase
require file
klass = const_get(name)
return klass if klass
raise "Class not found: #{name}"
end

moulon%


Guy Decoux
 
O

Ola Bini

Yep, const_missing().

James Edward Gray II

Ah, sorry. Thanks for the pointer. I thought I checked for it. But
apparently my brain is fried after to much friday-work.

/O
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top