racket - 具有自动类型字段转换的列表到结构转换
问题描述
我正在阅读 .csv 文件并通过
(define-struct my-struct (id name))
(apply my-struct '("5" "Tomas"))
(string? (my-struct-id (apply my-struct '("5" "Tomas"))))
将其转换为结构。但是,所有字段都是字符串,是否有一些优雅的方法可以强制string->number
转换id
字段?
非常感谢。
解决方案
正如我所看到的,有两种选择。第一个是最简单的,使用自定义构造函数:
; Option 1: Make a dedicated constructor that
; handles the conversion.
(struct my-struct (id name) #:transparent)
(define (create-struct id name)
(my-struct (string->number id) name))
第二种选择是(ab)使用警卫:
; Option 2: Use a guard
(define (converter id name the-struct-name)
(values (string->number id) name))
(struct my-second-struct (id name) #:guard converter #:transparent)
(apply my-second-struct '("5" "Tomas"))
推荐阅读
- laravel - Laravel Blade 组件和插槽:插槽内容不并排显示
- javascript - 防止使用 fetch 发送多个 http 请求
- c++ - std::unordered_map 的底层数据结构是什么?
- ios - 如何在 CMake 中为 iOS 签名 dylib
- angular - 从登录页面隐藏导航栏组件不起作用
- c# - 比较两个表 ID。ASP.NET MVC
- python - 有没有一种简单的方法可以将 Tkinter 转换为 matplotlib?
- autodesk-forge - 如何在 BIM 360 上获取模型之间的链接?
- javascript - 如何在 ajax 请求中为每个表单设置另一个“警报”?
- linux - 从 Mingw64 启动 TexnicCenter 而不启动多个实例?