J'ai besoin d'encapsuler une liste dans un objet séparé dans Scala agissant comme une classe wrapper pour ma collection. J'ai besoin de ceci pour implémenter quelques méthodes pour agir avec la liste (en détail j'ai besoin de trouver des objets dans la liste qui sont associés à un autre objet dans la liste).Itérer sur une liste enveloppée Scala
Alors tout d'abord mon code:
object Axons {
var axonList=List[Axon]();
var pos=0;
def init(al: List[Axon]) {
axonList= al;
}
def reverse(): List[Axon] = axonList.reverse
def get(count: Int) = axonList(count)
def getList(): List[Axon] = axonList
def length(): Int = axonList.length
}
Maintenant itérer se produit comme:
for (axon <- axons.getList)
Cela ressemble un peu laid pour moi, mais je ne pouvais pas comprendre comment mettre en œuvre un itérateur qui est utilisable plusieurs fois pour parcourir la collection.
Une autre approche, utilisant simplement la liste simple, consiste à définir une fonction qui utilise la fonction fold pour réduire la liste contenant simplement les objets que je veux avoir.
Ce que vous pensez est un moyen plus commun? Filtrez dans une liste séparée en tenant simplement les objets nécessaires ou en utilisant un itérateur. À mon avis, il serait plus propre d'encapsuler ma collection Axons dans un objet séparé, d'un point de vue logiciel de desing.
Selon vous, qu'est-ce qui convient le mieux au problème?
(Si vous vous demandez ce que je fais et ce que l'axone est, sa partie d'un réseau de neurones http://en.wikipedia.org/wiki/Neural_network et la collection axones enveloppe les connexions entre une source et un neurone de destination)
remerciements et genre ce qui a trait
============================================= ====
Solution de Felix
object Axons extends Traversable[Axon] {
var axonList=List[Axon]();
def init(al: List[Axon]) {
axonList= al;
}
def reverse(): List[Axon] = axonList.reverse
def get(count: Int) = axonList(count)
//look here!
def foreach[U](f: Axon=> U): Unit = axonList.foreach(f)
//end ...
def length(): Int = axonList.length
def findAxonsBySource(sourceNeuron: Neuron): List[Axon] = {
axonList collect {
case axon: Axon if axon.getSourceNeuron == sourceNeuron => axon
}
}
}
c'est-ce que vous merci beaucoup. – evildead
Vous êtes les bienvenus :) – Felix