oups, désolé le "MyClass.myFunc.call" était pas du ruby du tout ;-) (du javascript en fait) Désolé pour la confusion.
vi, rajouter un __call__ ... c'est moyen je trouve. Ou plutôt ça doit rester du code "interne"
Concernant les méthodes, attributs, ... Une méthode et un attribut c'est normale que ce ne soit pas pareil
Mais en fait ça dépend comment on fait ;-)
Un attribut est par défaut uniquement privé (et ça c'est le bien)
Mais on peut évidemment le rendre public.
Et on peut également définir les méthodes d'accès aux attributs, mais ces méthodes on l'énorme avantage (selon moi) de se comporter de l'extérieur comme si on accédait directement à l'attribut (pas de get...() set...(value) tout pas beau et lourd)
ex :
$ cat test.rb
class MyClass
attr_accessor :myAttr
def myAttr=(value)
@myAttr = "myAttr is set to #{value}"
end
def myAttr
print @myAttr + "\n"
end
end
obj = MyClass.new
obj.myAttr = 2
obj.myAttr
$ ruby test.rb
myAttr is set to 2
Sinon, par simple curiosité, comment fait ruby pour un nombre variable d'arguments ? (le *args de python)
[^] # Re: troll de noel
Posté par CrEv (site web personnel) . En réponse à la dépêche Ruby 1.9.0 est sorti pour Noël. Évalué à 2.
vi, rajouter un __call__ ... c'est moyen je trouve. Ou plutôt ça doit rester du code "interne"
Concernant les méthodes, attributs, ... Une méthode et un attribut c'est normale que ce ne soit pas pareil
Mais en fait ça dépend comment on fait ;-)
Un attribut est par défaut uniquement privé (et ça c'est le bien)
Mais on peut évidemment le rendre public.
Et on peut également définir les méthodes d'accès aux attributs, mais ces méthodes on l'énorme avantage (selon moi) de se comporter de l'extérieur comme si on accédait directement à l'attribut (pas de get...() set...(value) tout pas beau et lourd)
ex :
$ cat test.rb
class MyClass
attr_accessor :myAttr
def myAttr=(value)
@myAttr = "myAttr is set to #{value}"
end
def myAttr
print @myAttr + "\n"
end
end
obj = MyClass.new
obj.myAttr = 2
obj.myAttr
$ ruby test.rb
myAttr is set to 2
def myFunc(*args)
print args.join(", ")
end
myFunc(1, 2, 3, 4)
1, 2, 3, 4