(defun ivy/init-smex ()
(use-package smex
:defer t
:init (setq-default smex-history-length 32
smex-save-file (concat spacemacs-cache-directory
".smex-items"))))
这里面的冒号后面的具体有什么作用,怎么用?
(defun define-abbrev-table (tablename definitions
&optional docstring &rest props)
例如这个函数的定义中,&optional 和 &rest 有什么作用,怎么用?
optional 后面的形参是可选的,如果输入的时候没有指定,会变成nil。rest指定的形参是数量可变的,函数调用的实参会变成一个列表传给形参。
(defun fun (a &optional b c &rest rest)
(list a b c rest))
(fun 1) -> (1 nil nil nil)
(fun 1 2) -> (1 2 nil nil)
(fun 1 nil 3) -> (1 nil 3 nil)
(fun 1 2 3 4 5 6) -> (1 2 3 (4 5 6))
:defer和:init是不是代表在 声明的时候同时赋值变量?
这两个是直接传给 use-package
的。 use-package
是一个宏。你可以找一下 elisp 中宏相关的资料
简而言之宏的实参不会在宏被求值的时候立刻求值,而是会被当做数据直接传递给宏。因此宏可以自己决定那些代码在什么时候被求值。
以冒号打头的symbol求值之后会返回自己,就是说 (eq :a ':a)
的结果是 t。
@Liu233w 我不是说的你 ,你的挺好。
:foo
在 Emacs Lisp 中是 keyword symbol
,在 use-package
中把它用作 keyword arguments 的角色,用起来可读性更好些,也更灵活。