Posts Tagged ‘irb’

case foo.class might not work like you expect

irb(main):001:0> class Foo; end
=> nil
irb(main):002:0> class Bar; end
=> nil
irb(main):003:0> f = Foo.new
=> #
irb(main):004:0> case f.class
irb(main):005:1> when Foo then puts “f.class = Foo”
irb(main):006:1> when Bar then puts “f.class = Bar”
irb(main):007:1> else
irb(main):008:1*   puts “no match found”
irb(main):009:1> end
no match found
=> nil
irb(main):010:0> case f.class.name
irb(main):011:1> when “Foo” then puts “f.class.name = ‘Foo’”
irb(main):012:1> when “Bar” then puts “f.class.name = ‘Bar’”
irb(main):013:1> else
irb(main):014:1*   puts “no match found”
irb(main):015:1> end
f.class.name = ‘Foo’
=> nil

ruby aliasing

irb(main):001:0> class Foo
irb(main):002:1>   alias model class
irb(main):003:1>   def bar
irb(main):004:2>     p self.model
irb(main):005:2>   end
irb(main):006:1>   def baz
irb(main):007:2>     p model
irb(main):008:2>   end
irb(main):009:1>   def self.bam
irb(main):010:2>     p model
irb(main):011:2>   end
irb(main):012:1> end
=> nil
irb(main):013:0> f = Foo.new
=> #
irb(main):014:0> f.bar
Foo
=> nil
irb(main):015:0> f.baz
Foo
=> nil
irb(main):016:0> Foo.bam
NameError: undefined local variable or method `model’ for Foo:Class
        from (irb):10:in `bam’
        from (irb):16
        from :0

irb(main):017:0> Foo.model
NoMethodError: undefined method `model’ for Foo:Class
        from (irb):17
        from :0

class and module order relation in ruby

irb(main):001:0> class Stone
irb(main):002:1> end
=> nil
irb(main):003:0>
irb(main):004:0* module Alive
irb(main):005:1>   # superset
irb(main):006:1* end
=> nil
irb(main):007:0>
irb(main):008:0* class Reptile
irb(main):009:1>   # subset of alive creatures
irb(main):010:1*   include Alive
irb(main):011:1> end
=> Reptile
irb(main):012:0>
irb(main):013:0* class Mammal
irb(main):014:1>   # subset of alive creatures
irb(main):015:1*   include Alive
irb(main):016:1> end
=> Mammal
irb(main):017:0>
irb(main):018:0* class Dolphin < Mammal
irb(main):019:1>   # subset of alive creatures
irb(main):020:1* end
=> nil
irb(main):021:0>
irb(main):022:0* Alive > Stone
=> nil
irb(main):023:0> Alive > Reptile
=> true
irb(main):024:0> Alive > Mammal
=> true
irb(main):025:0> Alive > Dolphin
=> true
irb(main):026:0>
irb(main):027:0* Stone   < Alive
=> nil
irb(main):028:0> Reptile < Alive
=> true
irb(main):029:0> Mammal  < Alive
=> true
irb(main):030:0> Dolphin < Alive
=> true
irb(main):031:0>
irb(main):032:0* Dolphin < Mammal
=> true
irb(main):033:0> Mammal > Dolphin
=> true
irb(main):034:0>
irb(main):035:0* Dolphin > Mammal
=> false
irb(main):036:0> Mammal < Dolphin
=> false
irb(main):037:0>
irb(main):038:0* Reptile > Mammal # unrelated creatures
=> nil
irb(main):039:0> Reptile < Mammal # unrelated creatures
=> nil
irb(main):040:0> Mammal < Reptile # unrelated creatures
=> nil
irb(main):041:0> Mammal > Reptile # unrelated creatures
=> nil

methods on a module’s singleton class

irb(main):001:0> module M
irb(main):002:1>   class << self
irb(main):003:2>     def foo
irb(main):004:3>       p "Hello from M.foo"
irb(main):005:3>     end
irb(main):006:2>   end
irb(main):007:1> end
=> nil
irb(main):008:0> M.foo
"Hello from M.foo"
=> nil
irb(main):009:0>

irb(main):001:0> m = Module.new
=> #
irb(main):002:0> m.foo
NoMethodError: undefined method `foo’ for #
from (irb):2
irb(main):003:0> class << m
irb(main):004:1>   def foo
irb(main):005:2>     “Hello from m.foo”
irb(main):006:2>   end
irb(main):007:1> end
=> nil
irb(main):008:0> m.foo
=> “Hello from m.foo”

ruby statement modifier local variables

irb(main):001:0> puts foo if foo = "foo"
(irb):1: warning: found = in conditional, should be ==
NameError: undefined local variable or method `foo' for main:Object
from (irb):1

irb(main):002:0> puts foo if(foo = "foo")
(irb):2: warning: found = in conditional, should be ==
foo
=> nil
irb(main):003:0>

ruby heredocs as parameters

irb(main):001:0> class_name = "Foo"
=> "Foo"
irb(main):002:0> eval(<
irb(main):003:1″   class #{class_name}
irb(main):004:1″     def foo
irb(main):005:1″       :foo
irb(main):006:1″     end
irb(main):007:1″   end
irb(main):008:1″ EOS
=> nil
irb(main):009:0> f = Foo.new
=> #
irb(main):010:0> f.foo
=> :foo

!nil is true

irb(main):001:0> nil
=> nil
irb(main):002:0> !nil
=> true
irb(main):003:0> !!nil
=> false
irb(main):004:0> nil && true
=> nil
irb(main):005:0> true && nil
=> nil
irb(main):006:0> !!nil && true
=> false
irb(main):007:0> true && !!nil
=> false

ZeroDivisionError, Infinity and NaN in ruby

irb(main):005:0> 1/0
ZeroDivisionError: divided by 0
irb(main):027:0> 1.0 / 0
=> Infinity

irb(main):024:0> Infinity = 1.0 / 0
=> Infinity
irb(main):025:0> Infinity
=> Infinity
irb(main):026:0> Infinity == 1.0 / 0
=> true

irb(main):006:0> 0/0
ZeroDivisionError: divided by 0
irb(main):001:0> 0.0 / 0
=> NaN
irb(main):028:0> 1.0 % 0
=> NaN

irb(main):020:0> NaN = 0.0 / 0
=> NaN
irb(main):021:0> NaN
=> NaN
irb(main):022:0> NaN == 0.0 / 0
=> false

irb(main):003:0> result = 0.0 / 0
=> NaN
irb(main):004:0> result.nan? # only available on Float
=> true

checking the return code of ruby system calls

irb(main):001:0> success = system 'pwd'
/Users/snusnu
=> true
irb(main):002:0> if success && $?.exitstatus == 0
irb(main):003:1>   :success
irb(main):004:1> else
irb(main):005:1*   :failure
irb(main):006:1> end
=> :success

ruby default parameter values may well be instance methods

irb(main):038:0> class Foo
irb(main):039:1>   attr_accessor :bar
irb(main):040:1>   def foo(b = bar)
irb(main):041:2>     b
irb(main):042:2>   end
irb(main):043:1> end
=> nil
irb(main):044:0> f = Foo.new
=> #
irb(main):019:0> f.bar = :baz
=> :baz
irb(main):020:0> f.foo
=> :baz
irb(main):021:0> f.foo :bam
=> :bam

« Older Entries