reason - 一般如何将变体类型的值转换为字符串?
问题描述
假设我有一个由以下数据构造函数组成的 sum 类型......
type Entity =
| Student
| Staff
| Classes
有没有一种方法可以将给定 sum 类型的值多态转换为 string 类型的值,而无需采用以下方法。
let showEntity = e =>
switch (e){
| Student => "Student"
| Staff => "Staff"
| Classes => "Classes"
解决方案
它是在 OCaml/Reason 中使用 ppx 预处理完成的,例如,使用 ppx_deriving 库1,
[@deriving show({with_path: false})]
type t = Hello | World;
let main () =
print_endline("Hello, " ++ show(World));
main ();
并运行它dune exec ./main.exe
向我们展示了我们心爱的人
dune exec ./main.exe
Hello, World
前提是代码在文件中,并且在同一个文件夹中main.re
有一个名为的文件,内容如下dune
(executable
(name main)
(preprocess (pps ppx_deriving.std)))
并且ppx_deriving
库和dune
已安装,假设您使用的是 opam。如果您使用的是 bucklescript,请安装bs- deriving包。事实上,有很多库提供派生程序以及不同的派生程序,因此很难推荐一个(并且建议一个库超出了 SO 的范围,因此将其视为一般演示)。
1)
还要注意,如果我们将使用不带参数的派生器,则show
派生器需要一个参数{with_path: false)
,例如,
[@deriving show]
type t = Hello | World;
它将显示以模块名称为前缀的名称,这可能不是您想要的。
推荐阅读
- python - 如何登录到不和谐的美丽汤和请求
- powerbi - Power BI Desktop - 地图可视化问题(未显示所有位置)
- angular - 登录角度后重定向
- c++ - 如何使用 arduino 作为 LED 控制器?
- javascript - JS循环遍历数组来改变段落的innerHTML
- reactjs - React 构建未能缩小捆绑包。来自 UglifyJs 的错误
- c - 未声明(函数中首次使用)错误/XC16
- reactjs - Formik 在页面加载时验证初始值
- mongodb - TypeError:无法读取未定义的属性“市场”(第 23 行)
- python - 如何阅读整条消息而不仅仅是片段