m2fox
1
有几行代码:
(require 's)
(setq func-name "myfunc")
(setq args-desc "xxx")
(s-format "name: ${name}, args: ${args}" 'aget '(("name" . func-name) ("args" . args-desc)))
期待输出:
"name: myfunc, args: xxx"
而实际输出了:
"name: func-name, args: args-desc"
请教:怎么让最后一行的func-name
和args-desc
的值格式化到字符串中,而非变量名本身?
Kinney
2
用 backquote:
(s-format "name: ${name}, args: ${args}"
'aget `(("name" . ,func-name) ("args" . ,args-desc)))
或者写全:
(s-format "name: ${name}, args: ${args}"
'aget (list (cons "name" func-name) (cons "args" args-desc)))
m2fox
3
感谢!还找到了另一个函数s-lex-format也可以实现同样的效果:
(setq func-name "myfunc")
(setq args-desc "xxx")
(let ((name func-name) (args args-desc))
(s-lex-format "name: ${name}, args: ${args}"))
输出:
"name: myfunc, args: xxx"
Kinney
4
为什么不直接用 format:
(let ((name "myfunc")
(args "xxx"))
(format "name: %s, args: %s" name args))
m2fox
5
那是因为我格式化字符串中有很多个相同的参数(上面的字符串只是简单的举个例子),比如有10个${name}
,用format
太累了