2010-08-22 11 views
5

Supongamos que tengo una rutina que toma un valor de enumeración como argumento y devuelve un booleano ... y quiero verificar un conjunto de esos valores de enumeración para ver si son todos verdaderos. ¿Hay una manera idiomática de hacerlo? Este fue mi intento de "escuela vieja" que parece no scala-ish:forma de Scala para cambiar esto en una lista?

def allUnitQueuesEmpty(): Boolean = 
    (getQueue(QID.CPU).isEmpty() && 
     getQueue(QID.L1C_I).isEmpty() && 
     getQueue(QID.L1D_I).isEmpty() && 
     getQueue(QID.L1VC_I).isEmpty() && 
     getQueue(QID.L1C_D).isEmpty() && 
     getQueue(QID.L1D_D).isEmpty() && 
     getQueue(QID.L1VC_D).isEmpty() && 
     getQueue(QID.L1WB_D).isEmpty() && 
     getQueue(QID.L2C).isEmpty() && 
     getQueue(QID.L2WB).isEmpty() && 
     getQueue(QID.MEM_RD).isEmpty() && 
     getQueue(QID.MEM_WRT).isEmpty()); 

¿Se puede hacer esto con una lista?

-Jay

Respuesta

5

Todas las colecciones de Scala tener forall y exists métodos que determinar si la colección a la que están satisface el predicado suministra como un argumento (a través de los elementos de la colección) para cada elemento aplicado (forall) o para al menos un elemento (exists).

22

No hay necesidad de una lista, en realidad. QID.values() devuelve una matriz de todos los QID valores, y una serie se puede convertir implícitamente a una colección Scala, que le permite definir

def allUnitQueuesEmpty(): Boolean = QID.values.forall(v => getQueue(v).isEmpty) 

Si sólo necesita algunos de esos valores, esto funcionaría en su lugar:

import QID._ 
def l1UnitQueuesEmpty(): Boolean = Array(L1C_I, L1D_I, L1VC_I).forall(v => getQueue(v).isEmpty) 
Cuestiones relacionadas