Scala将这个改成列表的方式?

jay*_*007 5 scala

假设我有一个例程,它将枚举值作为参数并返回一个布尔值......我想检查一组枚举值,看它们是否都是真的.是否有惯用的方法来做到这一点.这是我的"老派"尝试,似乎是非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() );
Run Code Online (Sandbox Code Playgroud)

可以用List完成吗?

-Jay

Ale*_*nov 22

实际上,不需要列表.QID.values()返回所有QID值的数组,并且可以将数组隐式转换为Scala集合,从而可以定义

def allUnitQueuesEmpty(): Boolean = QID.values.forall(v => getQueue(v).isEmpty)
Run Code Online (Sandbox Code Playgroud)

如果您只需要其中一些值,则可以使用:

import QID._
def l1UnitQueuesEmpty(): Boolean = Array(L1C_I, L1D_I, L1VC_I).forall(v => getQueue(v).isEmpty)
Run Code Online (Sandbox Code Playgroud)


Ran*_*ulz 5

所有Scala的集合都有forallexists方法可以确定它们所应用的集合是否满足作为参数(在集合的元素上)为每个元素(forall)或至少一个元素(exists)提供的谓词.