【发布时间】:2019-05-15 23:34:22
【问题描述】:
我有一个不可变的集合来跟踪一组订阅者。这是添加 Subs 并返回 Boolean 以指示订阅是否已实际处理的方法:
var subs = Set.empty[Sub]
def addSub(addr: String, sub: Sub): Boolean = {
if(subs.contains(sub)) {
false
}
else {
subscribe(addr)
subs += sub
true
}
}
但是,这段代码非常“类似于 Java”。我试图让它更 Scala/Functional 但找不到方法,因为 Scala 中的赋值不会返回值,所以 subs += sub 必须在它自己的代码行中,让它看起来像 Java。我应该如何改进它?
我知道mutable.Set.add() 实际上返回布尔值。但是如何使用immutable.Set 做到这一点?
【问题讨论】:
-
您能给代码提供更多上下文吗?您声称您希望在功能上执行此操作,但您的代码示例取决于使用可变状态。没有纯粹的函数式方式来改变状态,因为一旦你这样做了,它就不再是纯粹的了。
标签: scala functional-programming