【发布时间】:2017-10-28 11:32:40
【问题描述】:
我有一个包含以下元素的 Scala 列表:
Worker("W1", "Worker 1", List(Office 1, Office 2))
Worker("W2", "Worker 2", List(Office 1, Office 3, Office 4, Office 5))
Worker("W3", "Worker 3", List(Office 3, Office 5))
Worker("W4", "Worker 4", List(Office 2, Office 4))
我有这个功能:
def setOffice(office: Office.Office, totalWorkers: List[Worker]): Worker = {
totalWorkers.find(_.offices.contains(office)).getOrElse(null) }
}
它在一个循环内,在循环的每个循环中被调用 3 次(不是函数式方法,但在这种情况下并不重要)。
我希望函数返回列表中包含 office 的第一个元素 Worker,而这个函数就是这样做的,然而我希望函数在每个循环中返回不同的结果,并且我没有成功。
例如,如果在一个循环中,使用此参数调用函数 3 次:
setOffice("Office 1", totalWorkers)
setOffice("Office 2", totalWorkers)
setOffice("Office 3", totalWorkers)
返回:
Worker 1
Worker 1
Worker 2
但我希望它返回
Worker 1
Worker 4
Worker 2
我可以使用变量轻松完成,但我不想使用 var's,我想以函数方式完成。
你知道我该怎么做吗?
【问题讨论】:
-
听起来你每次调用这个函数时都需要改变工作人员(通过从他们的办公室列表中删除已经找到的办公室),这违背了函数语言的引用透明度组件:见stackoverflow.com/questions/4847818/referential-transparency
标签: scala list functional-programming