[#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: Xavier Noria <fxn@...>
Date: 2012-03-22 08:07:17 UTC
List: ruby-talk #393974
Your emails mix classes, constants, and paths.

If paths is what you want to check then we need to leave classes and constan=
ts completely out of the thread. Do you agree with that?

Do you also agree in that checking if a path belongs to $" tells you nothing=
 about the constant it defines, if any?

Sent from my iPhone

On 22/03/2012, at 8:03, Nikolai Weibull <now@bitwi.se> wrote:

> 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:
>=20
>>>  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.
>=20
>> 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.
>=20
> True, I was seeing the wrong test output for that one.
>=20
>>> An alternative is to check $LOADED_FEATURES.  This isn=E2=80=99t
>>> straightforward either, as it doesn=E2=80=99t 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.
>=20
>> 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.
>>=20
>> 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.
>=20
> 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 te=
sts,
> but that it doesn=E2=80=99t work as intended.  I proposed an alternative t=
o
> 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=99=
s
> why I mentioned =E2=80=9Cfeature=E2=80=9D in my first e-mail.
>=20
> 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 cou=
rse
> 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
>=20
> def provided?(path)
>  $LOADED_FEATURES.any?{ |e| e.end_with? path + File.extname(e) }
> end
>=20
> 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=9C=
loading=E2=80=9D
> table.  (This solution won=E2=80=99t take autoloads into account either, i=
f
> one wants that to be done, but they=E2=80=99re going away in 3.0, so let=E2=
=80=99s
> ignore them ;-)
>=20

In This Thread