我不确定我是否理解type
中的属性defcustom
。我可以完美地定义以下变量而不符合type
。在这种情况下type
的目的是什么?
(defcustom foo 1 "foo" :type 'string)
(defcustom spam "a" "foo" :type 'integer)
答案 0 :(得分:3)
正如Elisp手册(节点Variable Definitions
)所说: 它指定哪些值合法,以及如何显示值。 &#34; < / p>
正如@amalloy所说,这会影响&#34;用户使用&#34;进行自定义的适当编辑控制。它还会影响Customize是否将当前值显示为:type
的有效值或类型不匹配。
总之,它为用户提供了类型检查和编辑帮助,它确定了Customize如何显示值(作为Lisp值,布尔值等)。
答案 1 :(得分:3)
首先,整数的类型为integer
,而不是int
,因此您的具体示例不适用于自定义。
:type
确定使用的编辑控件,并在保存自定义时提供完成和类型检查:
M-x customize-variable
选择一个最适合输入预期类型值的编辑控件。例如,boolean
类型变为切换按钮,简单类型变为integer
或string
进行线条编辑,choice
变为值菜单,set
a复选框列表等。
在某些编辑控件中,Customize提供完成功能。例如,当您在M-Tab
类型的行编辑中按function
时(用于挂钩变量),Customize会自动完成函数名称。如果有多个匹配的名称,您将看到一个包含所有完成候选项的弹出缓冲区。同样,color
窗口小部件可为您提供所有已知颜色名称的完成。
对于所有编辑控件,Customize会在保存之前检查当前值的类型,并拒绝应用任何不匹配类型的自定义。
例如,如果您在integer
窗口小部件中输入非数字,并尝试应用或保存自定义,则Customize将拒绝这样做并发出“此字段应包含整数”错误的信号。
答案 2 :(得分:1)
设置:type
会导致customize-variable
显示适当的编辑控件,供用户自定义。