Var = nil if false; p var.nil? #=> true | bug of the day?

I tested it using Ruby 1.8.6 patch 111 and also Ruby 1.9.0 (revision 15968).

var = nil if false
var.nil? #=> true

I actually saw it from tobi’s blog, then I discussed with a perler who
loves ruby as well, here’s a copy paste. (Bottomline: is it a feature
or a bug???)

12:52:37 PM edpratomo: kok bisa gitu? (yg irb itu)
12:52:49 PM Rie!: bug of the day -_-
12:52:56 PM edpratomo: ruby 1.9?
12:53:28 PM Rie!: 1.8.6 as well
12:55:09 PM edpratomo: oh i understand
12:55:31 PM edpratomo: var = nil if false creates var
12:56:01 PM Rie!: it’s just like the stupid param variable is still
available outside of the block/yield
12:56:07 PM edpratomo: irb(main):005:0> var = “blah” if false
=> nil
irb(main):006:0> var
=> nil

12:56:32 PM edpratomo: so it’s not a bug
12:56:58 PM edpratomo: ever got bitten by the leaky block scope?
12:57:18 PM Rie!: how come it’s not a bug :-B var should be undefined local var
12:57:20 PM Rie!: not nil
12:57:51 PM edpratomo: try to post that to ruby-talk :slight_smile: i believe you
will get “it’s not a bug” replies
12:58:11 PM Rie!: that’s from tobias luetjke blog
12:58:20 PM Rie!: so i believe many rubyists had noticed that
12:58:46 PM edpratomo: has been discussed in ruby-talk/core?
12:58:58 PM Rie!: haven’t checked yet
1:00:02 PM edpratomo: imho it’s not a bug. that foo = nil if false
creates unitialized foo.
1:00:31 PM edpratomo: in perl iirc such expression will be caught
1:00:39 PM Rie!: well it shouldn’t execute the command inside that if false
1:01:04 PM edpratomo: if the if clause is evaluated first.
1:03:56 PM edpratomo: perl -wle’my $foo = “ok” if 0; print $foo’
Use of uninitialized value in print at -e line 1.

1:04:45 PM edpratomo: perl -Mstrict -wle’my $foo = “ok” if 0; print $foo’
Use of uninitialized value in print at -e line 1
1:05:03 PM edpratomo: it’s a warning. not error.
1:05:22 PM edpratomo: so $foo is created, but unitialized.
1:05:38 PM edpratomo: in perl it will issue warning

[in bahasa indonesia]

Saya sebetulnya melihat ini dari blog Tobi kemudian saya berdiskusi
bersama seorang pengguna perl yang juga mencintai ruby, berikut tadi
copy paste nya. (Inti dari pertanyaan saya adalah apakah ini fitur
ataukah bug di ruby???)

···


blog: http://tinyurl.com/2bjgvn,
ruby: http://www.ruby-lang.org/id/about

“Developer Time is expensive…
Servers are cheap…”, Ezra Zygmuntowicz - Merb


ID-Ruby
Berdiskusi dan belajar bersama Bahasa Pemrograman Ruby, termasuk segala varian Ruby (JRuby, Rubinius, IronRuby, XRuby), dan program yang dibuat dengan Ruby (Ruby on Rails, JRuby on Rails, Merb)

<*> Kunjungi arsip milis id-ruby di
http://groups.yahoo.com/group/id-ruby/messages
http://www.mail-archive.com/id-ruby-hHKSG33TihhbjbujkaE4pw@public.gmane.org/
http://rubyurl.com/Q8DD
http://news.gmane.org/gmane.comp.lang.ruby.region.indonesia

<*> Baca peraturan id-ruby sebelum posting
http://rubyurl.com/gay1

<*> Ikutilah Jajak Pendapat ID-Ruby
http://rubyurl.com/3CCt

<*> Links ID-Ruby
http://rubyurl.com/n96r

<*> Database ID-Ruby
http://rubyurl.com/Iw3u

<*> Kunjungi Situs Resmi Ruby Indonesia
http://www.ruby-lang.org/id/

<*> Join Ruby Indonesia on Facebook
http://rubyurl.com/QV48

<*> Join Ruby Indonesia on LinkedIn
http://rubyurl.com/eh0i

Yahoo! Groups Links

<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/id-ruby/

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
http://groups.yahoo.com/group/id-ruby/join
(Yahoo! ID required)

<*> To change settings via email:
mailto:id-ruby-digest-hHKSG33TihhbjbujkaE4pw@public.gmane.org
mailto:id-ruby-fullfeatured-hHKSG33TihhbjbujkaE4pw@public.gmane.org

<*> To unsubscribe from this group, send an email to:
id-ruby-unsubscribe-hHKSG33TihhbjbujkaE4pw@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/

It’s neither.

Secara konteks semua variable begitu digunakan, tanpa initialization di ruby, adalah object nil.

Karena if-nya false, begitu var di panggil di line di bawahnya yah dianggap sebagai declaration dan use, otomatis value-nya nil.

Mau nanya ke Bung Arie, filosofinya pertanyaan ini apa yah? Karena ini kan gak ada practical use-nya di real life coding.

···



http://twitter.com/beol

-----Original Message-----
From: “Arie Kusuma Atmaja” ariekusumaatmaja2-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org

Date: Fri, 11 Apr 2008 13:14:33
To:id-ruby-hHKSG33TihhbjbujkaE4pw@public.gmane.org, ruby-talk-X+L+6nJQZ58h9ZMKESR00Q@public.gmane.org
Subject: [id-ruby] var = nil if false; p var.nil? #=> true | bug of the day ?

I tested it using Ruby 1.8.6 patch 111 and also Ruby 1.9.0 (revision 15968).

var = nil if false
var.nil? #=> true

I actually saw it from tobi’s blog, then I discussed with a perler who
loves ruby as well, here’s a copy paste. (Bottomline: is it a feature
or a bug???)

12:52:37 PM edpratomo: kok bisa gitu? (yg irb itu)
12:52:49 PM Rie!: bug of the day -_-
12:52:56 PM edpratomo: ruby 1.9?
12:53:28 PM Rie!: 1.8.6 as well
12:55:09 PM edpratomo: oh i understand
12:55:31 PM edpratomo: var = nil if false creates var
12:56:01 PM Rie!: it’s just like the stupid param variable is still
available outside of the block/yield
12:56:07 PM edpratomo: irb(main):005:0> var = “blah” if false
=> nil
irb(main):006:0> var
=> nil

12:56:32 PM edpratomo: so it’s not a bug
12:56:58 PM edpratomo: ever got bitten by the leaky block scope?
12:57:18 PM Rie!: how come it’s not a bug :-B var should be undefined local var
12:57:20 PM Rie!: not nil
12:57:51 PM edpratomo: try to post that to ruby-talk :slight_smile: i believe you
will get “it’s not a bug” replies
12:58:11 PM Rie!: that’s from tobias luetjke blog
12:58:20 PM Rie!: so i believe many rubyists had noticed that
12:58:46 PM edpratomo: has been discussed in ruby-talk/core?
12:58:58 PM Rie!: haven’t checked yet
1:00:02 PM edpratomo: imho it’s not a bug. that foo = nil if false
creates unitialized foo.
1:00:31 PM edpratomo: in perl iirc such expression will be caught
1:00:39 PM Rie!: well it shouldn’t execute the command inside that if false
1:01:04 PM edpratomo: if the if clause is evaluated first.
1:03:56 PM edpratomo: perl -wle’my $foo = “ok” if 0; print $foo’
Use of uninitialized value in print at -e line 1.

1:04:45 PM edpratomo: perl -Mstrict -wle’my $foo = “ok” if 0; print $foo’
Use of uninitialized value in print at -e line 1
1:05:03 PM edpratomo: it’s a warning. not error.
1:05:22 PM edpratomo: so $foo is created, but unitialized.
1:05:38 PM edpratomo: in perl it will issue warning

[in bahasa indonesia]

Saya sebetulnya melihat ini dari blog Tobi kemudian saya berdiskusi
bersama seorang pengguna perl yang juga mencintai ruby, berikut tadi
copy paste nya. (Inti dari pertanyaan saya adalah apakah ini fitur
ataukah bug di ruby???)


blog: http://tinyurl.com/2bjgvn,
ruby: http://www.ruby-lang.org/id/about

“Developer Time is expensive…
Servers are cheap…”, Ezra Zygmuntowicz - Merb


ID-Ruby
Berdiskusi dan belajar bersama Bahasa Pemrograman Ruby, termasuk segala varian Ruby (JRuby, Rubinius, IronRuby, XRuby), dan program yang dibuat dengan Ruby (Ruby on Rails, JRuby on Rails, Merb)

http://rubyurl.com/Q8DD
http://news.gmane.org/gmane.comp.lang.ruby.region.indonesia

Yahoo! Groups Links


ID-Ruby
Berdiskusi dan belajar bersama Bahasa Pemrograman Ruby, termasuk segala varian Ruby (JRuby, Rubinius, IronRuby, XRuby), dan program yang dibuat dengan Ruby (Ruby on Rails, JRuby on Rails, Merb)

<*> Kunjungi arsip milis id-ruby di
http://groups.yahoo.com/group/id-ruby/messages
http://www.mail-archive.com/id-ruby-hHKSG33TihhbjbujkaE4pw@public.gmane.org/
http://rubyurl.com/Q8DD
http://news.gmane.org/gmane.comp.lang.ruby.region.indonesia

<*> Baca peraturan id-ruby sebelum posting
http://rubyurl.com/gay1

<*> Ikutilah Jajak Pendapat ID-Ruby
http://rubyurl.com/3CCt

<*> Links ID-Ruby
http://rubyurl.com/n96r

<*> Database ID-Ruby
http://rubyurl.com/Iw3u

<*> Kunjungi Situs Resmi Ruby Indonesia
http://www.ruby-lang.org/id/

<*> Join Ruby Indonesia on Facebook
http://rubyurl.com/QV48

<*> Join Ruby Indonesia on LinkedIn
http://rubyurl.com/eh0i

Yahoo! Groups Links

<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/id-ruby/

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
http://groups.yahoo.com/group/id-ruby/join
(Yahoo! ID required)

<*> To change settings via email:
mailto:id-ruby-digest-hHKSG33TihhbjbujkaE4pw@public.gmane.org
mailto:id-ruby-fullfeatured-hHKSG33TihhbjbujkaE4pw@public.gmane.org

<*> To unsubscribe from this group, send an email to:
id-ruby-unsubscribe-hHKSG33TihhbjbujkaE4pw@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/

Ruby sees you have a local variable called 'var'. It hasn't been given a value, and so is nil.

Dave

···

On Apr 11, 2008, at 12:14 AM, Arie Kusuma Atmaja wrote:

I tested it using Ruby 1.8.6 patch 111 and also Ruby 1.9.0 (revision 15968).

var = nil if false
var.nil? #=> true

Arie Kusuma Atmaja wrote:

I tested it using Ruby 1.8.6 patch 111 and also Ruby 1.9.0 (revision

15968).

var = nil if false
var.nil? #=> true

I actually saw it from tobi's blog, then I discussed with a perler who
loves ruby as well, here's a copy paste. (Bottomline: is it a feature
or a bug???)

irb(main):001:0> something = "something" if false
=> nil
irb(main):002:0> something_else = nil
=> nil
irb(main):003:0> something_else.class
=> NilClass
irb(main):004:0> exit

- --
Phillip Gawlowski
Twitter: twitter.com/cynicalryan

~ My life needs a rewind/erase button.
      -- Calvin

Arie Kusuma Atmaja wrote:

I tested it using Ruby 1.8.6 patch 111 and also Ruby 1.9.0 (revision
15968).

var = nil if false
var.nil? #=> true

irb(main):001:0> a = 1
=> 1
irb(main):002:0> a = nil if false
=> nil
irb(main):003:0> a
=> 1
irb(main):004:0> b
NameError: undefined local variable or method `b' for main:Object
        from (irb):4
irb(main):005:0> b = nil if false
=> nil
irb(main):006:0> b
=> nil

There is some salt in the problem althow I don't think that it makes any
troubles in real life.

by
TheR

···

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

I tested it using Ruby 1.8.6 patch 111 and also Ruby 1.9.0 (revision
15968).

var = nil if false
var.nil? #=> true

Ruby sees you have a local variable called ‘var’. It hasn’t been given a
value, and so is nil.

Ok, I got it, thanks Dave.

m:x arie$ irb19
irb(main):001:0> a = 1
=> 1
irb(main):002:0> a
=> 1
irb(main):003:0> a = nil if false
=> nil
irb(main):004:0> exit
m:x arie$ irb19
irb(main):001:0> a = nil if false
=> nil
irb(main):002:0> a
=> nil
irb(main):003:0> exit
m:x arie$ irb19
irb(main):001:0> a
NameError: undefined local variable or method a' for main:Object from (irb):1 from /opt/local/ruby19/bin/irb19:12:in
irb(main):002:0> a = ‘nothing’ if false
=> nil
irb(main):003:0> a
=> nil
irb(main):004:0> exit

···

On 11/04/2008, Dave Thomas dave-kbbdpT5sCmpWk0Htik3J/w@public.gmane.org wrote:

On Apr 11, 2008, at 12:14 AM, Arie Kusuma Atmaja wrote:

Dave


blog: http://tinyurl.com/2bjgvn,
ruby: http://www.ruby-lang.org/id/about

“Developer Time is expensive…
Servers are cheap…”, Ezra Zygmuntowicz - Merb


ID-Ruby
Berdiskusi dan belajar bersama Bahasa Pemrograman Ruby, termasuk segala varian Ruby (JRuby, Rubinius, IronRuby, XRuby), dan program yang dibuat dengan Ruby (Ruby on Rails, JRuby on Rails, Merb)

<*> Kunjungi arsip milis id-ruby di
http://groups.yahoo.com/group/id-ruby/messages
http://www.mail-archive.com/id-ruby-hHKSG33TihhbjbujkaE4pw@public.gmane.org/
http://rubyurl.com/Q8DD
http://news.gmane.org/gmane.comp.lang.ruby.region.indonesia

<*> Baca peraturan id-ruby sebelum posting
http://rubyurl.com/gay1

<*> Ikutilah Jajak Pendapat ID-Ruby
http://rubyurl.com/3CCt

<*> Links ID-Ruby
http://rubyurl.com/n96r

<*> Database ID-Ruby
http://rubyurl.com/Iw3u

<*> Kunjungi Situs Resmi Ruby Indonesia
Bahasa Pemrograman Ruby

<*> Join Ruby Indonesia on Facebook
http://rubyurl.com/QV48

<*> Join Ruby Indonesia on LinkedIn
http://rubyurl.com/eh0i

Yahoo! Groups Links

<*> To visit your group on the web, go to:
Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos
(Yahoo! ID required)

<*> To change settings via email:
mailto:id-ruby-digest-hHKSG33TihhbjbujkaE4pw@public.gmane.org
mailto:id-ruby-fullfeatured-hHKSG33TihhbjbujkaE4pw@public.gmane.org

<*> To unsubscribe from this group, send an email to:
id-ruby-unsubscribe-hHKSG33TihhbjbujkaE4pw@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos

Be careful when testing issues that involve local variables in IRB.
Top level local variables such as these do behave differently in IRB.

Cheers

robert

···

2008/4/11, Phillip Gawlowski <cmdjackryan@googlemail.com>:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Arie Kusuma Atmaja wrote:
> I tested it using Ruby 1.8.6 patch 111 and also Ruby 1.9.0 (revision
15968).
>
> var = nil if false
> var.nil? #=> true
>
> I actually saw it from tobi's blog, then I discussed with a perler who
> loves ruby as well, here's a copy paste. (Bottomline: is it a feature
> or a bug???)

irb(main):001:0> something = "something" if false
=> nil
irb(main):002:0> something_else = nil
=> nil
irb(main):003:0> something_else.class
=> NilClass
irb(main):004:0> exit

--
use.inject do |as, often| as.you_can - without end

Be careful when testing issues that involve local variables in IRB.
Top level local variables such as these do behave differently in IRB.

Oh I see, thanks for reminding Robert.

#!/usr/bin/ruby

nil-check.rb

begin
p var1
rescue NameError => e
puts e.message
end

var1 = nil if false
p var1

begin
p var2
rescue NameError => e
puts e.message
end

var2 = ‘nothing’ if false
p var2

···

On 11/04/2008, Robert Klemme shortcutter-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org wrote:

Cheers

robert


use.inject do |as, often| as.you_can - without end


blog: http://tinyurl.com/2bjgvn,
ruby: http://www.ruby-lang.org/id/about

“Developer Time is expensive…
Servers are cheap…”, Ezra Zygmuntowicz - Merb


ID-Ruby
Berdiskusi dan belajar bersama Bahasa Pemrograman Ruby, termasuk segala varian Ruby (JRuby, Rubinius, IronRuby, XRuby), dan program yang dibuat dengan Ruby (Ruby on Rails, JRuby on Rails, Merb)

<*> Kunjungi arsip milis id-ruby di
Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos
http://www.mail-archive.com/id-ruby-hHKSG33TihhbjbujkaE4pw@public.gmane.org/
http://rubyurl.com/Q8DD
http://news.gmane.org/gmane.comp.lang.ruby.region.indonesia

<*> Baca peraturan id-ruby sebelum posting
http://rubyurl.com/gay1

<*> Ikutilah Jajak Pendapat ID-Ruby
http://rubyurl.com/3CCt

<*> Links ID-Ruby
http://rubyurl.com/n96r

<*> Database ID-Ruby
http://rubyurl.com/Iw3u

<*> Kunjungi Situs Resmi Ruby Indonesia
Bahasa Pemrograman Ruby

<*> Join Ruby Indonesia on Facebook
http://rubyurl.com/QV48

<*> Join Ruby Indonesia on LinkedIn
http://rubyurl.com/eh0i

Yahoo! Groups Links

<*> To visit your group on the web, go to:
Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos
(Yahoo! ID required)

<*> To change settings via email:
mailto:id-ruby-digest-hHKSG33TihhbjbujkaE4pw@public.gmane.org
mailto:id-ruby-fullfeatured-hHKSG33TihhbjbujkaE4pw@public.gmane.org

<*> To unsubscribe from this group, send an email to:
id-ruby-unsubscribe-hHKSG33TihhbjbujkaE4pw@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos