Should I write
var.kind_of?( NilClass )
or simply
var == nil
?
I have the feeling that kind_of?(NilClass) is more "proper"/"clean"
but then again it decreases the readability and might not even be
necessary.
Are there any situations where it makes sense to subclass NilClass?
Regards,
Philipp
Do you actually care if it is nil? Or just untruthy? I much prefer
not var
···
On Aug 14, 2010, at 1:02 PM, Philipp Kempgen <lists@kempgen.net> wrote:
Should I write
var.kind_of?( NilClass )
or simply
var == nil
Should I write
var.kind_of?( NilClass )
or simply
var == nil
?
I have the feeling that kind_of?(NilClass) is more "proper"/"clean"
but then again it decreases the readability and might not even be
necessary.
The other suggested checks are cleaner IMHO. There is only ever one instance of NilClass (see below) so you can immediately check against that or use method #nil?.
You cannot create other instances:
irb(main):001:0> NilClass.new
NoMethodError: undefined method `new' for NilClass:Class
from (irb):1
from /usr/local/bin/irb19:12:in `<main>'
irb(main):002:0> NilClass.allocate
TypeError: allocator undefined for NilClass
from (irb):2:in `allocate'
from (irb):2
from /usr/local/bin/irb19:12:in `<main>'
irb(main):003:0>
Are there any situations where it makes sense to subclass NilClass?
Unlikely.
So, in an attempt to sum this up. This is what you can do ordered from what I'd consider most reasonable to least reasonable:
if var.nil? # test for identity
if var == nil # test for equivalence
if var.equal? nil # test for identity
unless var # note: will also catch false
if NilClass === var # superfluous type check
if var.kind_of? NilClass # superfluous type check
Kind regards
robert
···
On 14.08.2010 22:02, Philipp Kempgen wrote:
--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
Steve Klabnik wrote:
You can always var.nil?
Well, yes if the var is a kind_of?(Object) but not if
it's just a BasicObject.
Regards,
Philipp
The purpose of a BasicObject is, generally, to implement proxy classes.
Presumably, this would send a nil? through to whatever you were proxying,
right?
Also, I don't see a kind_of? on BasicObject, either, so calling pretty much
anything on var would fail.
···
On Saturday, August 14, 2010 03:10:28 pm Philipp Kempgen wrote:
Steve Klabnik wrote:
> You can always var.nil?
Well, yes if the var is a kind_of?(Object) but not if
it's just a BasicObject.
David Masover schrieb (am 15.8.10 07:58):
Steve Klabnik wrote:
> You can always var.nil?
Well, yes if the var is a kind_of?(Object) but not if
it's just a BasicObject.
The purpose of a BasicObject is, generally, to implement proxy classes.
Presumably, this would send a nil? through to whatever you were proxying,
right?
Also, I don't see a kind_of? on BasicObject, either, so calling pretty much
anything on var would fail.
Right.
I guess I'll stick with
! var
or
not var
which is what Ryan suggested and which is about twice as fast as
any one of
! var.nil?()
! var.eql?(nil)
! nil.eql?(var)
! var.kind_of?(NilClass)
Regards,
Philipp
···
On Saturday, August 14, 2010 03:10:28 pm Philipp Kempgen wrote: