Dans le cas suivant Interface dans un module:Comment limiter un type à la classe d'une interface et non à l'instance de cette interface?
module Action
abstract def perform
end
Je voudrais l'utiliser pour instancier différentes classes qui mettent en œuvre:
class Run
include Action
def perform
puts "run!"
end
end
class Jump
include Action
def perform
puts "jump!"
end
end
Je sais est possible de définir un tableau comme [] of Action
et être capable de stocker des instances de Action
, mais je suis intéressé par les classes au lieu des instances.
Je voudrais savoir comment définir la restriction de type afin que je puisse stocker une référence à la classe qui implémente l'interface et non une instance spécifique.
Mon objectif est d'être capable d'instancier une nouvelle instance de certaine classe et de pouvoir appeler la méthode perform
.
A cette époque, il est possible d'écrire le code suivant:
actions = [Run, Jump]
actions.each do |klass|
instance = klass.new.as(Action)
instance.perform
end
Et les choses fonctionnent, mais il ne sera pas possible de stocker cette liste des classes dans une variable d'instance étant donné que les restrictions de type sont un peu plus strict.
Quelle serait la syntaxe de restriction de type pour ce cas?
Quelle est la raison pour instancier une nouvelle instance à chaque fois, au lieu d'utiliser la même instance? – asterite
@asterite a dev peut modifier les variables d'instance dans le fichier perform. Le fait de faire appel à plusieurs fibres/threads peut entraîner des problèmes. AFAIK une nouvelle instance est le meilleur scénario. –