rust-option,一个提供 Option 和 Result 以及 match 的 Javascript 库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
exoticknight
V2EX    分享创造

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

  •  
      exoticknight
    exoticknight 2019-02-09 10:11:48 +08:00 3306 次点击
    这是一个创建于 2443 天前的主题,其中的信息可能已经有所发展或是发生改变。
    近来在学 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 前端吧
    quina42
        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     Solana     2288 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 01:20 PVG 09:20 LAX 18:20 JFK 21:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86