Clojure:如何获取符号的*值*作为关键字

Clojure:如何获取符号的*值*作为关键字,clojure,Clojure,我从如下文件中获得了一些数据: A abcdefghi... B bcdefghij... 我想将其转换为一组地图,每行一张: A: abcdefghi B: bcdefghij 但我不知道该怎么做。我可以把我想要的两个部分变成符号 part1 and part2 但如果使用 #{(keyword part1) part2} 我明白了 但是,有没有办法获得第1部分的值而不是该名称本身呢?你需要阅读并澄清你的问题 此语法: #{ 3 1 4 } 创建一组值,而不是贴图。您还需要澄

我从如下文件中获得了一些数据:

A abcdefghi...
B bcdefghij...
我想将其转换为一组地图,每行一张:

A: abcdefghi
B: bcdefghij
但我不知道该怎么做。我可以把我想要的两个部分变成符号

part1

and

part2
但如果使用

#{(keyword part1) part2}
我明白了


但是,有没有办法获得第1部分的值而不是该名称本身呢?

你需要阅读并澄清你的问题

此语法:

#{ 3 1 4 }  
创建一组值,而不是贴图。您还需要澄清
第1部分
第2部分
——它们是什么

此外,关键字文字的开头有冒号:

{ :a 1 :b 2 }    ; some map

有一个很好的例子。特别是阅读“获取Clojure”和Clojure备忘单。

使用
Ctrl-v选项卡将文本回送到测试文件中:

$ echo "A    abcde
B       bcdef" > test.txt
测试是否正确写入文件:

$ cat test.txt
A   abcde
B   bcdef
然后,在clojure REPL中,编写函数:

(defn file2cells [fpath]
  (map #(clojure.string/split % #"\t") 
       (clojure.string/split (slurp fpath) #"\n")))

(defn keywordize-first [vec-list]
  (map (fn [[k v]] [(keyword k) v]) vec-list))

(defn file2maps [fpath]
  (into {} (keywordize-first (file2cells fpath))))
(file2maps "test.txt")
;; => {:A "abcde", :B "bcdef"}
应用以下功能:

(defn file2cells [fpath]
  (map #(clojure.string/split % #"\t") 
       (clojure.string/split (slurp fpath) #"\n")))

(defn keywordize-first [vec-list]
  (map (fn [[k v]] [(keyword k) v]) vec-list))

(defn file2maps [fpath]
  (into {} (keywordize-first (file2cells fpath))))
(file2maps "test.txt")
;; => {:A "abcde", :B "bcdef"}

对不起,我不清楚;数据是(“A”“abcdef…”),我将它放入第1部分和第2部分,第一部分和第二部分。。。然后一个带有{a:“abcdef”}的映射就是我想要的结果。。。但是我没有看到如何评估part1来获得它。你不能有
{A:“abcdef”}
。您可能有
{:A“abcdef”}
(关键字作为映射键)或
{“A”“abcdef”}
(字符串作为映射键)。实际上,您可以使用
{A“abcdef”}
(符号作为映射键)-但是符号作为映射键通常很麻烦。