scala - 应该返回相同的值 3 个连续调用
问题描述
我有一个练习要在 Scala 中解决。我需要制定一种方法来决定有一天是否可以踢足球。这取决于是否下雨。下雨的概率小于20%。如果某天下雨,那么接下来的两天也会下雨。所以,我们将连续三天或下雨。我这样做了:
case class Weather() {
var rainyDay = 0
def rain = scala.util.Random.nextDouble() <= 0.2
def canPlay = {
rainyDay match {
case 1 | 2 =>{
rainyDay = rainyDay+1
false
}
case _ => {
rain match {
case true => {
rainyDay = 1
false
}
case _ => true
}
}
}
}
}
我测试了它并且工作正常,但我想知道是否有更好的方法来做到这一点?
(对不起我的英语)
解决方案
如果您使用的是 Scala 2.13.x,那么您可能只是unfold()
在无限Iterator
.
case class Weather() {
private val canPlayDay = Iterator.unfold(0)(state => Some {
if (state > 0) (false, state-1)
else if (util.Random.nextDouble() <= 0.2) (false, 2)
else (true, 0)
})
def canPlay() : Boolean = canPlayDay.next()
}
注意:var
不需要。
推荐阅读
- ios - Swift:如何从 CNContactPickerViewController 搜索选项中隐藏“SIRI Found IN APPS”选项?
- javascript - JavaScript / SAPUI5 如何将文件附加到指定位置并将其导出到指定位置?
- android - 如何实现一个自定义的 ImageView,在其中我可以在视图中绘制 Bitmap 后回收它?
- android - 过渡动画无法从回收视图到详细信息屏幕
- java - android在设备上保存非常小的数据的最佳方法
- nlp - 词性(POS)与句法依赖解析
- highcharts - Highcharts 自行删除系列
- c++ - 我不明白 DoNotOptimizeAway 的定义
- jquery - Jquery Datatable - 显示结果但不为复选框分配值
- javascript - Javascript常规Eypression不起作用