假设有一个布尔变量,最初赋值false.有没有办法说,让这个变量true在接下来的5分钟内然后让它false再次出现?
我目前的想法是我可以将变量与时间戳一起存储,然后一旦变量转到true,时间戳设置为当前时间,然后通过一个方法检查变量的值,true如果当前时间和初始时间戳形成持续时间小于5分钟,然后false持续时间大于5分钟.我正在考虑从一个隐式转换Boolean到一个RichBoolean通过一个优雅的方法名称来处理这个机制的东西.
是否有更优雅或Scala本地方式这样做?
时间戳的想法很容易实现(这里的参数是以秒为单位):
class TransientlyTrue(duration: Double) {
private[this] val createdAt = System.nanoTime
def value = (System.nanoTime-createdAt)*1e-9 <= duration
}
implicit def TransientToBoolean(t: TransientlyTrue) = t.value
Run Code Online (Sandbox Code Playgroud)
通过隐式转换,您可以透明地将其丢弃到您需要的任何位置Boolean.或者你可以把它关掉然后打电话.value.
你可能能够用期货更优雅地完成你想要的东西.你不会有一个正在改变其值的变量,但是不清楚这是你问题中的绝对要求,并且你将有一个方法在一定时间后开始返回一个不同的值.例如,使用Twitter的实现:
import com.twitter.util._
import com.twitter.conversions.time._
implicit val timer = new JavaTimer
val t = Future.sleep(10.seconds)
Run Code Online (Sandbox Code Playgroud)
现在t.isDone将是假的十秒然后是真的.这种方法的好处在于,您将来可以获得许多其他组合器,可以让您更直接地解决问题 - 有关详细信息,请参阅Scala文档.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |