Petit mot sur la méthode extend : d'un point de vue POO, elle permet en quelque sorte "d'instancier un module". Si une classe étend un module Mod, les "méthodes d'instance" de celui-ci seront transmises à la classe en tant que méthode de classe. Si l'on étend Mod avec un simple objet (bon, d'accord, une classe est un objet... mon explication précédente reste valable.), celui-ci se comportera comme une instance de Mod, avec les méthodes qui vont avec... Deux bonnes sources sur le sujet : [Ruby's Cube, :fr] et [Juixe TechKnow, :en].
### Multiple affectation and || ###
a, b = nil, 10
#=> [nil, 10]
a || b
#=> 10
### On Arrays... ###
a = [0,"111",2,3,3,3,3]
a.class
#=> [0,"111",2,3,3,3,3]
a.delete 3
#=> 3
a
#=> [0,"111",2]
a.delete_at 1
#=> "111"
a
#=> [0,2]
a.insert(1,"1")
#=> [0,"1",2]
a += [3,4,5]
#=> [0,"1",2,3,4,5]
a.inspect
#=> "[0,\"1\",2,3,4,5]"
a.map!{|v| (v.is_a? Numeric)? v : v.to_i}
#=> [0,1,2,3,4,5]
a = a.join "-"
#=> "0-1-2-3-4-5"
a = a.split '-'
#=> ["0", "1", "2", "3", "4", "5"]
a | ["1", "6", "7"]
#=> ["0", "1", "2", "3", "4", "5", "6", "7"]
### And Strings... ###
str = " trop d'espace tue l'espace... "
#=> " trop d'espace tue l'espace... "
str = str.strip
#=> "trop d'espace tue l'espace..."
str.crypt "Oz" # "Oz" est le 'sel'
#=> "Oz2SDpLQ4HL02"
str.count "e"
#=> 5
### Finaly, the Object#extend method ###
module Mod
def homerize
p "Doh!"
end
end
class Simpson
extend Mod
end
Simpson.homerize
# "Doh !"
#=> nil
bart = Simpson.new
# bart can't homerize, unless...
bart.extend Mod
bart.homerize
# "Doh !"
#=> nil