V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
exoticknight
V2EX  ›  分享创造

rust-option,一个提供 Option 和 Result 以及 match 的 JavaScript 库

  •  
  •   exoticknight ·
    exoticknight · 2019-02-09 10:11:48 +08:00 · 2936 次点击
    这是一个创建于 2149 天前的主题,其中的信息可能已经有所发展或是发生改变。
    近来在学 Rust,觉得 Option 和 Result 挺有意思的,于是用 TypeScript 实现了这么一个库。
    提供跟原生 Option 和 Result 几乎一样的 API (跟其他类似的库非常不一样哈),也提供 match 和一些实用的函数。
    其中 match 完全可以单独使用 🎉

    npm: https://www.npmjs.com/package/rust-option
    github: https://github.com/exoticknight/rust-option

    随手写的一个使用例子: https://stackblitz.com/edit/react-ts-6xdhsg

    欢迎 Star 和 issue 😃
    16 条回复    2019-02-12 23:15:04 +08:00
    quinoa42
        1
    quinoa42  
       2019-02-09 10:36:08 +08:00
    可是 Option 不是 Rust 独创的,至少 SML 就支持了 http://sml-family.org/Basis/option.html
    trait
        2
    trait  
       2019-02-09 10:51:10 +08:00   ❤️ 1
    @quinoa42 额,貌似没说 rust 独创吧

    match 能不能以 struc-tural equivalence 的方式实现
    [Some({some:{data:Number}}), () => this.setState({ name: option.unwrap().some.data })],
    这里的 data 直接吗调好后取出来
    trait
        3
    trait  
       2019-02-09 10:51:50 +08:00
    @trait 吗调 => match
    emlcj
        4
    emlcj  
       2019-02-09 11:17:08 +08:00   ❤️ 1
    cuebyte
        5
    cuebyte  
       2019-02-09 11:38:11 +08:00
    少年還是用 rust 寫前端吧
    quinoa42
        6
    quinoa42  
       2019-02-09 11:38:58 +08:00
    @trait 毕竟库名是 rust-option 嘛,不过确实 API 和 Rust 的保持一致这么说也没错
    exoticknight
        7
    exoticknight  
    OP
       2019-02-09 12:24:00 +08:00
    @trait 有这么想过,只是从语法上看的话似乎很难判定使用者究竟想要什么样的数据
    exoticknight
        8
    exoticknight  
    OP
       2019-02-09 12:25:27 +08:00
    @emlcj 模式匹配很好啊,希望赶紧能用吧~
    exoticknight
        9
    exoticknight  
    OP
       2019-02-09 12:27:03 +08:00
    @cuebyte rust 对 wasm 的支持比较有望,这未尝不是一个写前端好途径,不过做业务我还是 js 或者 ts 吧🤣
    azh7138m
        10
    azh7138m  
       2019-02-09 13:48:14 +08:00 via Android
    可以直接放在 jsx 上面嘛,提供一个 match 和 where 组件,不是舒舒服服?
    在已经合进标准的 js 语法里面实现模式匹配,写起来总是看着怪怪的。
    exoticknight
        11
    exoticknight  
    OP
       2019-02-09 13:55:26 +08:00
    @azh7138m 可以考虑做一个 react 组件。js 模式匹配还在 stage1。
    azh7138m
        12
    azh7138m  
       2019-02-09 20:17:47 +08:00
    @exoticknight https://codesandbox.io/s/rlp0kyj6o4 大概这样子吧,见笑了
    azh7138m
        13
    azh7138m  
       2019-02-09 20:18:40 +08:00
    写完看了一下,这不就是 react router......
    azh7138m
        14
    azh7138m  
       2019-02-09 20:26:02 +08:00
    如果要合理实现的话,得允许 when 是一个函数,里面某一个 value 也得可以是一个 value ;判断要放到 Case 上面做,value 用 context 传下去。
    感觉并不会提高生产力。
    exoticknight
        15
    exoticknight  
    OP
       2019-02-12 23:12:46 +08:00
    @azh7138m 看了一下 sandbox,的确很像 react router。如果用 jsx 的话,或许可以直接用那个 stage1 的语法。
    我这个库嘛,重点是在 Option 和 Result (还有不想写 try...catch🤣),只是使用这两个东西还是要配上 match 比较好。库里的 match 实现也支持多种类型,但看 tc39 的话不知道它还能支持什么。
    exoticknight
        16
    exoticknight  
    OP
       2019-02-12 23:15:04 +08:00
    @trait
    比如 Some({some:{data:Number, another: Number}}),这样我不知道是提取 data 还是提取 another。
    但或许可以退一步,把 Some / Ok / Err 里的东西 unwrap 出来,我抽时间改进一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1585 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:52 · PVG 00:52 · LAX 08:52 · JFK 11:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.