我正在编写这个应用程序(同时学习scala和函数编程),它有一个需要访问的增长列表。我有一种实现它的方法,但它似乎不是一个好方法。
我有一个类在另一个线程中轮询另一个源并将响应附加到列表中。还有一个函数会偶尔使用该列表中的最新响应并附加到另一个列表。
我唯一能够提出的方法是让轮询功能改变列表。我在创建类时做了类似声明的事情。可以var stream = Stream()
或val list = collection.mutable.list
。然后使用var stream = stream :+ response
更新轮询功能。
这似乎不是一个好方法吗?
case class example extends Runnable {
var responses = Stream[response] = Stream()
var validResponses = Stream[response] = Stream()
def run() {
while(true){
val r = pollFunction
responses = responses :+ r
Thread.sleep(time)
}
}
def get: response = {
lazy val r = responses.last
if( isValid(r) ) validResponses = validResponses :+ r
validResponses.last
}
}
我碰巧使用了流,但可以用collection.mutable或其他东西替换。我不确定是否有办法以更实用的方式做这样的事情?