Ruby19 and defined?

This seems to be a change in 1.9 that's breaking some code (it was reported by a user of the bit-struct library). Here's the test case:

class C; def self.foo; end; end
class D<C
   p superclass
   p defined?(superclass.foo)
   p defined?(superclass.fooz)
end

$ ruby -v bug.rb
ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-linux]
C
"method"
nil
$ ruby19 -v bug.rb
ruby 1.9.0 (2007-12-25 revision 14709) [i686-linux]
C
true
$ ruby19svn -v bug.rb
ruby 1.9.0 (2008-03-21 revision 15824) [i686-linux]
C
true

I don't see anything quite relevant in http://eigenclass.org/hiki/Changes+in+Ruby+1.9.

···

--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

I know there was an RCR related to this once. Maybe it was accepted.
GL.
-R

···

$ ruby -v bug.rb
ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-linux]
C
"method"
nil
$ ruby19 -v bug.rb
ruby 1.9.0 (2007-12-25 revision 14709) [i686-linux]
C
true
true

--
Posted via http://www.ruby-forum.com/\.

This seems to be a change in 1.9 that's breaking some code

a bug always break some code :slight_smile:

There are many chance that it's a bug.

Guy Decoux

Roger Pack wrote:

I know there was an RCR related to this once. Maybe it was accepted.

You mean an RCR proposing that defined? return true, right?
The problem here is not that defined? returns true instead of "method" though.
The problem is that it returns true instead of nil for the method that doesn't
exist. I doubt that that behaviour was proposed in an RCR.

···

--
Jabber: sepp2k@jabber.org
ICQ: 205544826

Hmmmm, not so sure that that's actually a bug.

I've not found a good definition for what define? is supposed to do
when given an expression instead of a simple term. It certainly never
evaluated the expression. I don't know that I've ever used it with an
expression, but my impression was that it works syntactically more
than semantically, so whether or not a given expression would raise an
exception when evaluated wouldn't affect whether the expression was
defined. For example, I'd expect that

     defined?(1/0)

would not indicate that the expression was undefined just because it
represents a divide by zero.

Having just looked at the latest beta of Pickaxe 3, I notice that Dave
still has define? returning strings instead of true/nil, and the page
has the red header indicating that it's been updated for 1.9.

Personally, I'm unhappy if 1.9 is no longer returning a description of
the syntactical class of the argument to defined? seems like a loss of
valuable information, and I'd hope that it was the returning of nil
rather than 'method' which is a bug.

···

On 3/22/08, Sebastian Hungerecker <sepp2k@googlemail.com> wrote:

Roger Pack wrote:
> I know there was an RCR related to this once. Maybe it was accepted.

You mean an RCR proposing that defined? return true, right?
The problem here is not that defined? returns true instead of "method" though.
The problem is that it returns true instead of nil for the method that doesn't
exist. I doubt that that behaviour was proposed in an RCR.

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/