Emacs 如何定义传递参数时重复自身的函数
有没有一种简单的方法来定义一个传递参数时会重复自身的函数 例如,我定义了以下函数Emacs 如何定义传递参数时重复自身的函数,emacs,elisp,Emacs,Elisp,有没有一种简单的方法来定义一个传递参数时会重复自身的函数 例如,我定义了以下函数 (defun swap-sign () (interactive) (search-forward-regexp "[+-]") (if (equal (match-string 0) "-") (replace-match "+") (replace-match "-")) ) 我想呼叫C-u交换号四次 我试过了 (defun swap-sign (&optional
(defun swap-sign ()
(interactive)
(search-forward-regexp "[+-]")
(if (equal (match-string 0) "-")
(replace-match "+")
(replace-match "-"))
)
我想呼叫C-u交换号
四次
我试过了
(defun swap-sign (&optional num)
(interactive)
(let ((counter 0)
(num (if num (string-to-number num) 0)))
(while (<= counter num)
(search-forward-regexp "[+-]")
(if (equal (match-string 0) "-")
(replace-match "+")
(replace-match "-"))
(setq counter (1+ counter)))))
(取消交换符号(&可选num)
(互动)
(让((计数器0)
(num(如果num(字符串到num)0)))
(而(
有关更多详细信息,请参阅交互式
特殊表单的文档:
C-h finteractive
RET
有关更多详细信息,请参阅交互式特殊表单的文档:
C-h f
interactive
RET.您需要告诉emacs期望并传入参数,方法是添加一个“p”作为interactive的参数规范(M-x apropos interactive
以获取文档)在这里,我对您的代码进行了最小的更改以使其正常工作-但是,请注意,您不需要let/while来执行迭代,并且arg也不需要是可选的
(defun swap-sign (&optional num)
(interactive "p")
(let ((counter 1))
(while (<= counter num)
(search-forward-regexp "[+-]")
(if (equal (match-string 0) "-")
(replace-match "+")
(replace-match "-"))
(setq counter (1+ counter)))))
(取消交换符号(&可选num)
(交互式“p”)
(让((柜台1))
(while(您需要通过添加一个“p”作为交互式(M-x apropos interactive
获取文档)的参数规范,告诉emacs期望并传入参数)在这里,我对您的代码进行了最小的更改以使其正常工作-但是,请注意,您不需要let/while来执行迭代,并且arg也不需要是可选的
(defun swap-sign (&optional num)
(interactive "p")
(let ((counter 1))
(while (<= counter num)
(search-forward-regexp "[+-]")
(if (equal (match-string 0) "-")
(replace-match "+")
(replace-match "-"))
(setq counter (1+ counter)))))
(取消交换符号(&可选num)
(交互式“p”)
(让((柜台1))
(而(这仅仅是为了更改符号。您是否可以确定num是否为奇数并更改一次?每次调用交换符号
都会将光标指向匹配后的第一个字符。因此调用它四次应该交换四个符号。我是在1231.196+760.489+213.553+122.165-24.633
这样的字符串上调用它的,是不是o更改符号。您是否可以确定num是否为奇数并更改一次?每次调用swap sign
都会将光标指向匹配后的第一个字符。因此,调用四次应该交换四个符号。我在字符串上调用它,如1231.196+760.489+213.553+122.165-24.633
非常漂亮。非常感谢。很好。非常感谢。感谢您向我展示了如何用最小的更改修复代码。感谢您向我展示了如何用最小的更改修复代码。