我想要这段代码:
choice = 2; changeRGB(img, choice);
做同样的事情:
(setq name "foobar")
(defun (intern name) ())
我试过这个(来自This question):
(defun foobar ())
但我得到了一个名为my-name-function的函数,但我想要我的foobar函数。我的目标是从keymap的列表中定义minors模式。
由于
答案 0 :(得分:0)
我无法使用make-my-function
宏重新创建您的问题,但请使用backquote进行尝试:
(defmacro make-my-function (name)
`(defun ,(intern (format "my-%s-function" name)) ()
'interactive
'(message "It works!")))
答案 1 :(得分:0)
你的宏工作正常。你是怎么试图调用它的?您应该这样调用:M-: (symbol-function 'my-foo-function)
。然后(lambda nil
(interactive)
(message "It's work !"))
显示函数定义:
defun
在定义宏之前,您的初始尝试不起作用的原因是(defun (intern name) ())
是一个宏 - 它不会评估它的参数。所以defun
在语法上是不正确的:(intern name)
需要一个符号作为其第一个参数,而(make-my-function foo)
是一个列表,而不是一个符号。
在您发表评论后更新了
你的问题很清楚。现在听起来你想在一个变量 my-foo-function
的上下文中调用(defmacro make-my-function (name)
(list 'defun
(intern (symbol-value (intern (format "my-%s-function" name))))
()
(list 'interactive)
'(message "It's work !")))
(setq my-foo-function "toto")
(make-my-function foo)
,其值是一个字符串。
如果是这种情况,请使用:
EXT:fluid_styled_content/Resources/Private/Partials/Mediagallery.html
我无法想象这样一个用例,但我怀疑这也不是你想做的事情。您似乎没有详细说明所需行为是什么。