研究rust,scala和kotiln数猜游戏(kotlin)尝试第二次和第三次的印象


TRPL猜数字游戏。
我将不使用循环就编写kotlin。
在kotlin中,没有任何选择或选择。
只有try-catch可以进行错误处理。
我想返回成功和失败以及返回值,所以我暂时不使用Pair。

有很多科特林。
我认为这里有发电机。
但是,"协程"功能是实验性
毕竟,很容易产生一个具有产量的序列。
我想知道它不久是否会生锈。
添加使用kotlin.coroutines.experimental.buildSequence创建无限列表。
从带有协程的命名空间中可以看出,协程不是专用于生成器的,协程有很多,生成器是其中的一部分。
我还没有看到其他功能。可能是。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Random
import kotlin.coroutines.experimental.buildSequence
fun main(args:Array<String>){
    val secret_number = Random().nextInt(99) + 0
    println("秘密の数字は次の通り:${secret_number}")
    println("数をあててごらん")
    println("ほら予想を入力してね")
    buildSequence{
        while(true){
            yield(readLine())
        }
    }.map{
        s->try{
            Pair(true,Integer.parseInt(s))
        }catch(e:Exception){
        Pair(false,0)
        }
    }.filter{
        p->p.first
    }.map{
        p->p.second
    }.map{
        i-> when{
            i==secret_number -> {println("正解");i}
            i<secret_number -> {println("小さ過ぎる");i}
            else -> {println("大き過ぎる");i}
        }
    }.filter{
        i->i==secret_number
    }.first()
}

我以为是我写的,但是如果有一个过程可能在与map或filter链接时导致错误,则它可能是一个,也可能不是,并且不会出现生锈的情况。
对于scala,rust和kotlin,我认为scala是最容易编写的。
斯卡拉