【发布时间】:2014-01-23 16:00:06
【问题描述】:
我一直在尝试找到一种惯用的方式将用户数据转换为 clojure 中的有效关键字。
一个可能的用例是在阅读 excel 电子表格时,我想为除了第一行之外的每一行动态构建一个映射,其中第一行包含将成为关键字的标题。我需要考虑可能包含空格或其他无效字符的标题。我已经读过关键字函数不会抱怨,并且会给你一个可能难以使用甚至有害的无效密钥。
我可以手动进行转换,或者可能使用像 slgger 这样的框架来执行此操作,但我想知道是否有任何内置的东西可以处理这个问题。
另外,我读到过创建太多键可能会使堆过载,但那是从 2010 年开始的,它可能已在 1.3 中解决。用字符串键而不是关键字创建我的哈希映射对我来说最好吗?我已经读过这样做不是惯用的。
【问题讨论】:
-
是否有充分的理由不将带有违规字符的字符串用作键而不是转换为关键字?似乎您可以避免整个问题并保持键与列名相同。
-
正如下面所说的过度思考,它不会抱怨空格,因此(关键字“hi there”)被转换为 :hi there,因为你不能直接调用它,所以这不容易使用,你必须始终使用(关键字“hi there”),:hi there 抛出运行时异常
-
序列化和重新加载字符串是一个已解决的问题,与为每个字符串制作可读关键字的繁琐工作相比,制作关键字关键字是一个很小的好处。除非你不需要序列化!如果您不打算存储和重新加载关键字,那么只需从字符串中创建关键字。
(keyword "this is a string")完全有效,只是在其默认打印形式下不可读。 -
要明确:带空格的关键字无效。没事。它只是不可读。
-
在空格的情况下你是对的,但是关键字允许我也可能遇到的无效字符,比如 % soace 是我可能遇到的一个例子,但它甚至很难使用如果它可能是有效的。我一直倾向于使用“增加百分比”并将其转换为“增加百分比”的重击手,这将成为一个有效的密钥,但我想确保我没有重新发明轮子。
标签: clojure