SBCL中声明标识符explicit-check的含义及作用是什么?
explicit-check是SBCL内部使用的非标准自定义声明,没有纳入公开的官方文档,也不属于Common Lisp标准规定的声明标识符。
它的作用是作为编译器的静态检查标记:被该声明修饰的函数,返回值必须被调用方显式使用,要么赋值给变量,要么作为逻辑判断的条件。如果调用该函数时直接丢弃了返回值,SBCL编译器会主动抛出警告,提示开发者可能存在逻辑疏漏。
就你看到的y-or-n-p举例,这个函数的设计目的就是获取用户的yes/no选择,返回值就是用户的选择结果,调用时不处理返回值完全不符合使用场景,explicit-check就是用来在编译阶段提前拦截这类低级错误。
这类声明通常只在SBCL内部源码中使用,只会加在返回值有明确使用意义、忽略返回值大概率是代码写错了的函数上,属于SBCL自研的编译期校验能力。
内容的提问来源于stack exchange,提问作者Flux
相关产品推荐
相关产品推荐

