首页 > 解决方案 > 具有自动类型字段转换的列表到结构转换

问题描述

我正在阅读 .csv 文件并通过

(define-struct my-struct (id name))
(apply my-struct '("5" "Tomas"))
(string? (my-struct-id (apply my-struct '("5" "Tomas"))))

将其转换为结构。但是,所有字段都是字符串,是否有一些优雅的方法可以强制string->number转换id字段?

非常感谢。

标签: racket

解决方案


正如我所看到的,有两种选择。第一个是最简单的,使用自定义构造函数:

; 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"))

推荐阅读