17-06-2009, 11:39 AM
Oui, Ruby propose sensiblement la même chose. Cf. String[]
Sinon, on peut effectivement surcharger quelques opérateurs, oui.
En revanche, le langage étant dynamiquement typé, tu ne peux pas avoir plusieurs méthodes qui ont des arguments différents : la dernière méthode est utilisée.
En pratique, avec Rails, le plus souvent, on surcharge attribut=.
a = "hello there"
a[1] #=> 101
a[1,3] #=> "ell"
a[1..3] #=> "ell"
a[-3,2] #=> "er"
a[-4..-2] #=> "her"
a[12..-1] #=> nil
a[-2..-4] #=> ""
a[/[aeiou](.)\1/] #=> "ell"
a[/[aeiou](.)\1/, 0] #=> "ell"
a[/[aeiou](.)\1/, 1] #=> "l"
a[/[aeiou](.)\1/, 2] #=> nil
a["lo"] #=> "lo"
a["bye"] #=> nil
Sinon, on peut effectivement surcharger quelques opérateurs, oui.
En revanche, le langage étant dynamiquement typé, tu ne peux pas avoir plusieurs méthodes qui ont des arguments différents : la dernière méthode est utilisée.
En pratique, avec Rails, le plus souvent, on surcharge attribut=.
class Person
def initialize(name)
@name = name
end
def name=(name)
@name = name
end
def name
@name
end
end
# La même en plus concis.
class Person
attr_accessor :name
def initialize(name)
@name = name
end
end