[#393742] Getting the class of an object. — Ralph Shnelvar <ralphs@...32.com>

Consider;

14 messages 2012/03/06

[#393815] arcadia IDE requires tcl/tk and ruby-tk — Thufir Hawat <hawat.thufir@...>

which or where tcl and tk does arcadia require? Is this a gem which I

13 messages 2012/03/13

[#393952] What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...>

Hi!

18 messages 2012/03/21
[#393953] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

Active Support has recently added qualified_const_* methods to Module

[#393954] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

Ah, that won't work in 1.8.

[#393959] Re: What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...> 2012/03/21

On Wed, Mar 21, 2012 at 16:43, Xavier Noria <fxn@hashref.com> wrote:

[#393960] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

On Wed, Mar 21, 2012 at 8:17 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#393961] Re: What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...> 2012/03/21

On Wed, Mar 21, 2012 at 20:48, Xavier Noria <fxn@hashref.com> wrote:

[#393962] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/21

On Wed, Mar 21, 2012 at 9:51 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#393967] Re: What’s the best way to check if a feature/class has been loaded? — Nikolai Weibull <now@...> 2012/03/22

On Wed, Mar 21, 2012 at 22:11, Xavier Noria <fxn@hashref.com> wrote:

[#393969] Re: What’s the best way to check if a feature/class has been loaded? — Xavier Noria <fxn@...> 2012/03/22

On Thu, Mar 22, 2012 at 6:15 AM, Nikolai Weibull <now@bitwi.se> wrote:

[#394154] uninitialized constant SOCKSSocket — Resident Moron <lists@...>

I am running ruby 1.9.3 on a linux box. I would like to use

10 messages 2012/03/29

[#394160] Why z = Complex(1,2) rather than z = Complex.new(1,2)? — Ori Ben-Dor <lists@...>

What's this syntax, z = Complex(1,2), as opposed to z =

14 messages 2012/03/29

[#394175] shoes no such file to load -- rubygems — Mr theperson <lists@...>

I have installed shoes to develop GUI applications but when I try and

13 messages 2012/03/29

[#394201] Can't open url with a subdomain with an underscore — Jeroen van Ingen <lists@...>

I try to open the following URL: http://auto_diversen.marktplaza.nl/

10 messages 2012/03/30

[#394222] Ruby openssl ECC help plz — no name <lists@...>

I am confused on how to properly export public ECC key. I can see it

13 messages 2012/03/31

Re: What’s the best way to check if a feature/class has been loaded?

From: Nikolai Weibull <now@...>
Date: 2012-03-22 07:03:34 UTC
List: ruby-talk #393970
On Thu, Mar 22, 2012 at 06:56, Xavier Noria <fxn@hashref.com> wrote:
> On Thu, Mar 22, 2012 at 6:15 AM, Nikolai Weibull <now@bitwi.se> wrote:

>>  I see that you completely cut out the part about const_defined? not
>> calling const_missing, which is a rather big part of the problem with
>> using const_defined? in the first place.

> We are supposedly emulating defined? somehow but for constant paths and
> without going up the ancestor chain in each step doesn't it? defined? does
> not call const_missing.

True, I was seeing the wrong test output for that one.

>> An alternative is to check $LOADED_FEATURES.  This isn’t
>> straightforward either, as it doesn’t contain the exact argument given
>> to require.  There are internal functions like rb_provided that could
>> have been exposed to make it easy to check if a feature had been
>> loaded/is available.

> File names and class objects, and module objects, and constants... you
> cannot derive one from the other. They are decoupled in Ruby except for the
> fact that the class/module keywords assign, and that if you assign an
> anonymus class/module to a constant, then its name is set after the
> constant.
>
> But in Ruby file foo.rb can define the constant Bar, which may hold a module
> whose name is "Wadus". They are quite orthogonal features.

Yes, I realize that, but let’s forget the constant bit (as I tried to
do in the part that you cut out from the rest of this discussion on
$LOADED_FEATURES, require, and provided?) and focus on the original
problem of determining if a feature is available or not.  In my first
e-mail I explained that I’d been using defined? to perform such tests,
but that it doesn’t work as intended.  I proposed an alternative to
defined? that tried to walk a constant path without ever returning to
the top level, but I wasn’t happy with the solution and, as we’ve
seen, there are semantic issues with such a solution (should
const_missing be called or not?).  I was, however, originally looking
for a better alternative to the constant lookup altogether.  That’s
why I mentioned “feature” in my first e-mail.

As I said, Ruby uses the (expanded) path of the argument to require as
the “feature”.  If Ruby provided a convenient way to check if a path
was in $LOADED_FEATURES that’d solve my use case.  This can of course
be emulated, and I’m surely making too big a deal about this, but I’d
rather have Kernel.provided? that wraps the extant rb_provided than
having to define

def provided?(path)
  $LOADED_FEATURES.any?{ |e| e.end_with? path + File.extname(e) }
end

for each project that needs this functionality.  Finally, such a
definition can never truly emulate rb_provided (or what the return
value would be from require), as Ruby doesn’t expose the “loading”
table.  (This solution won’t take autoloads into account either, if
one wants that to be done, but they’re going away in 3.0, so let’s
ignore them ;-)

In This Thread