user =>(def v-1"this is v1")
user =>(def v-2"这是v2")
user =>(defmacro m [v](symbol(str"v-"v)))
user =>(m 1)
"这是v1"
user =>(m 2)
"这是v2"
user =>(让[i 2](mi))
CompilerException java.lang.RuntimeException:无法在此上下文中解析符号:vi,编译:(NO_SOURCE_PATH:73:12)
我可以写两个宏
(m 2)
和
(让[i 2](mi))
得到"这是v2"?
没有宏可以这样做:
(defn m [v] (var-get (resolve (symbol (str "v-" v)))))
(m 1) ;; => "This is v1"
(let [i 2] (m i)) ;; => "This is v2"
Run Code Online (Sandbox Code Playgroud)
如果需要,您也可以使用宏:
(defmacro m [v] `@(resolve (symbol (str "v-" ~v))))
Run Code Online (Sandbox Code Playgroud)