Scala способ изменить это в список? - PullRequest
5 голосов
/ 23 августа 2010

Предположим, у меня есть подпрограмма, которая принимает значение перечисления в качестве аргумента и возвращает логическое значение ... и я хочу проверить набор этих значений перечисления, чтобы убедиться, что все они истинны. Есть ли идиоматический способ сделать это? Это была моя попытка "старой школы", которая кажется не-scala-ish:

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() );

Можно ли это сделать с помощью списка?

-Jay

Ответы [ 2 ]

22 голосов
/ 23 августа 2010

Нет необходимости в списке, на самом деле.QID.values() возвращает массив всех QID значений, и массив можно неявно преобразовать в коллекцию Scala, что позволяет определить

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

Если вам нужны только некоторые из этих значений, это будетработать вместо:

import QID._
def l1UnitQueuesEmpty(): Boolean = Array(L1C_I, L1D_I, L1VC_I).forall(v => getQueue(v).isEmpty)
5 голосов
/ 23 августа 2010

У всех коллекций Scala есть методы forall и exists, которые определяют, удовлетворяет ли коллекция, к которой они применяются, предикату, предоставленному в качестве аргумента (над элементами коллекции) для каждого элемента (forall)или хотя бы для одного элемента (exists).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...