[#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:

>> =C2=A0I see that you completely cut out the part about const_defined? no=
t
>> 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? doe=
s
> not call const_missing.

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

>> An alternative is to check $LOADED_FEATURES. =C2=A0This isn=E2=80=99t
>> straightforward either, as it doesn=E2=80=99t contain the exact argument=
 given
>> to require. =C2=A0There are internal functions like rb_provided that cou=
ld
>> 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 t=
he
> 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 mod=
ule
> whose name is "Wadus". They are quite orthogonal features.

Yes, I realize that, but let=E2=80=99s 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=E2=80=99d been using defined? to perform such tes=
ts,
but that it doesn=E2=80=99t 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=E2=80=99t happy with the solution and, as we=E2=
=80=99ve
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=E2=80=99s
why I mentioned =E2=80=9Cfeature=E2=80=9D in my first e-mail.

As I said, Ruby uses the (expanded) path of the argument to require as
the =E2=80=9Cfeature=E2=80=9D.  If Ruby provided a convenient way to check =
if a path
was in $LOADED_FEATURES that=E2=80=99d solve my use case.  This can of cour=
se
be emulated, and I=E2=80=99m surely making too big a deal about this, but I=
=E2=80=99d
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=E2=80=99t expose the =E2=80=9Cl=
oading=E2=80=9D
table.  (This solution won=E2=80=99t take autoloads into account either, if
one wants that to be done, but they=E2=80=99re going away in 3.0, so let=E2=
=80=99s
ignore them ;-)

In This Thread