科特林。期待何时条件。怎么修?

Zor*_*ome 3 kotlin

我正在编写一个 kotlin 解析器库并面临以下问题。

我的代码

fun main(args : Array<String>) {
val test = "jap"
val url = when (test) {
    "jap" -> "https://staticlib.me/manga-list?types[]=10",
    "cor" -> "https://staticlib.me/manga-list?types[]=11",
    "chi" -> "https://staticlib.me/manga-list?types[]=12",
    "eng" -> "https://staticlib.me/manga-list?types[]=13",
    "rus" -> "https://staticlib.me/manga-list?types[]=14",
    "fan" -> "https://staticlib.me/manga-list?types[]=15",
    "all" -> "https://staticlib.me/manga-list",
    else -> "https://staticlib.me/manga-list?types[]=10"
}
println(url)

}
Run Code Online (Sandbox Code Playgroud)

错误信息

compiler.kotlin:11:62: error: expecting a when-condition
    "jap" -> "https://staticlib.me/manga-list?types[]=10",
                                                         ^
compiler.kotlin:12:62: error: expecting a when-condition
    "cor" -> "https://staticlib.me/manga-list?types[]=11",
                                                         ^
etc.
Run Code Online (Sandbox Code Playgroud)

我该如何解决它?

Inn*_*der 5

您必须删除when表达式内的逗号:

fun main(args : Array<String>) {
    val test = "jap"
    val url = when (test) {
        "jap" -> "https://staticlib.me/manga-list?types[]=10"
        "cor" -> "https://staticlib.me/manga-list?types[]=11"
        "chi" -> "https://staticlib.me/manga-list?types[]=12"
        "eng" -> "https://staticlib.me/manga-list?types[]=13"
        "rus" -> "https://staticlib.me/manga-list?types[]=14"
        "fan" -> "https://staticlib.me/manga-list?types[]=15"
        "all" -> "https://staticlib.me/manga-list"
        else -> "https://staticlib.me/manga-list?types[]=10"
    }
    println(url)
}
Run Code Online (Sandbox Code Playgroud)

您还可以按如下方式改进代码:

fun main(args : Array<String>) {
    val test = "jap"
    var url = "https://staticlib.me/manga-list"
    if (test != "all") url += "?types[]=" + when (test) {
        "jap" -> "10"
        "cor" -> "11"
        "chi" -> "12"
        "eng" -> "13"
        "rus" -> "14"
        "fan" -> "15"
        else  -> "10"
    }
    println(url)
}
Run Code Online (Sandbox Code Playgroud)

编辑

正如gidds在评论中所建议的,这是改进代码的另一种方法:

fun main(args : Array<String>) {
    val test = "jap"
    val types = when (test) {
        "jap" -> "10"
        "cor" -> "11"
        "chi" -> "12"
        "eng" -> "13"
        "rus" -> "14"
        "fan" -> "15"
        "all" -> null
        else  -> "10"
    }
    val url = "https://staticlib.me/manga-list" + types?.let{ "?types[]=$it" }
    println(url)
}
Run Code Online (Sandbox Code Playgroud)