gpt4 book ai didi

Scala:如果在匹配案例中

转载 作者:行者123 更新时间:2023-12-02 17:19:10 25 4
gpt4 key购买 nike

有什么方法可以在 Scala 中将 if 放入匹配案例中吗?

像这样:

def createSchedules(listTask: List[TaskOrder], physicalResources: List[Physical], humanResources: List[Human], previousTime: Duration): List[TaskSchedule] = listTask match {
case TaskOrder(id, time, physicalRes, order) :: t =>
val taskScheduleHumanResources = setHumanResources(physicalRes, humanResources)
if (physicalRes != null)
new TaskSchedule(
order,
order.getProduct(),
Task(id, time, physicalRes),
physicalRes,
taskScheduleHumanResources,
order.quantity,
previousTime,
previousTime + time) :: createSchedules(t, physicalRes, humanResources, previousTime + time)
case Nil => Nil
}

这样做我得到一个错误提示:

type mismatch; found : Unit required: List[Objects.TaskSchedule]

最好的方法是什么?

最佳答案

编译器推断 Unit 的原因是您没有 else 子句,这意味着您不会返回值以防 physicalRes 为空。

您需要在代码中添加一个 else 子句:

case TaskOrder(id, time, physicalRes, order) :: t => 
val taskScheduleHumanResources = setHumanResources(physicalRes, humanResources)
if (physicalRes != null) // stuff
else createSchedules(t, physicalRes, humanResources, previousTime + time)

您可以使用collect 只选择想要的元素:

val res: List[TaskSchedule] = listTask.collect {
case order if order.physicalRes != null => new TaskSchedule(...)
}

或者你也可以折叠集合,只有当你找到非空的physicalRes时才累加:

val res: List[TaskSchedule] = listTask.foldLeft(List.empty[TaskOrder]) {
case (acc, order) =>
if (order.physicalRes != null) {
new TaskSchedule(...) :: acc
} else acc
}

关于Scala:如果在匹配案例中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44229171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com