这个问题越想越觉得不对劲……
我在我的程序中定义了类似“地图构造函数”的东西。这背后的想法是我有一个通用的地图结构来处理一些“项目”,但我想为特定类型的项目强制执行一些默认值。
我遇到的问题是这个“地图构造函数”有一个 kv 对,并且该对的值应该由使用该地图的函数确定(在下面的示例中可能会更清楚)。
我的第一个想法是在值中引用一个表达式,然后eval
在所述函数中对其进行操作。第二个想法是用 a 替换值fn
,但这似乎返回类似于引用表达式的内容。
让我试着描述一下这个问题:
- 模型结果图应该类似于 {:a 1 :b 2 :c 3}
构造函数类似于
(defn cons-field [b] {:a (fn [name] (str name "!")) :b b :c "default"})
项目已创建
(def a-field (cons-field 5))
使用地图的调用函数类似于
(defn the-function [name field] (str (get-in field [:a])))
现在我需要的是这个:a的值是'the-function'中参数名称的函数。当然最后一个功能不起作用,我不确定它是否是正确的方法。':a' 键并不总是 a fn
; 有时它只是一个字符串文字。有任何想法吗?
干杯!