V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
857681664
V2EX  ›  程序员

闲着没事用 Kotlin 写了个 Rust 风格的 Result

  •  
  •   857681664 ·
    zshnb · 2021-11-04 13:00:40 +08:00 · 1670 次点击
    这是一个创建于 901 天前的主题,其中的信息可能已经有所发展或是发生改变。
    fun main() {
        val fileUtil = FileUtil()
        val result = fileUtil.openFile("ok")
        val content = result match {
            OK {
                data
            }
            Error {
                throw error
            }.toString()
        }
        println(content)
    }
    

    Error 闭包那个 toString 想了好久也没想出怎么去掉。

    9 条回复    2021-11-04 23:28:03 +08:00
    Kasumi20
        1
    Kasumi20  
       2021-11-04 13:53:26 +08:00
    这是啥?中缀函数?
    857681664
        2
    857681664  
    OP
       2021-11-04 14:47:38 +08:00
    @Kasumi20 是的
    aguesuka
        3
    aguesuka  
       2021-11-04 14:58:14 +08:00
    稍微改了一下
    https://gist.github.com/ilhikki/fad115495ff78564a1e605eef11a864a
    是中缀表达式吗, 怎么可以换行
    857681664
        4
    857681664  
    OP
       2021-11-04 15:01:24 +08:00
    @aguesuka 是中缀,你说的换行指的是哪里,是 match 后面没有跟参数吗
    aguesuka
        5
    aguesuka  
       2021-11-04 15:02:31 +08:00
    @857681664 我代码里的 FAIL 如果不和花括号一行的话就报错.
    857681664
        6
    857681664  
    OP
       2021-11-04 15:17:33 +08:00
    @aguesuka 好像看不太出来为啥,我写的没有这么复杂,都是带接收者的 lambda
    857681664
        7
    857681664  
    OP
       2021-11-04 15:37:44 +08:00
    尝试用可空类型解决了 toString 的问题
    ```kotlin
    fun main() {
    val fileUtil = FileUtil()
    val result = fileUtil.openFile("error")
    val content = result match {
    OK { str ->
    str
    }
    Error { error ->
    throw error
    }
    }
    println(content)
    }
    ```
    SoloCompany
        8
    SoloCompany  
       2021-11-04 20:45:46 +08:00
    你说的是 Nothing 类型吧? 怪不得看起来怪怪的
    857681664
        9
    857681664  
    OP
       2021-11-04 23:28:03 +08:00 via Android
    @SoloCompany 没有 nothing 呀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3122 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:46 · PVG 22:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.