【发布时间】:2017-05-31 09:05:07
【问题描述】:
我读到 CL 支持可选类型(因为该语言具有此功能),在许多情况下我会假设 allos 用于更快的代码,但我似乎找不到任何关于实际编写类型代码的信息。是否可以显式键入代码而不是使用黑客? (例如,#'vector 生成一个simple-vector,有点让我想起 JS 中的 |0 强制转换为整数)
或者也许因为类型实际上是 CLOS 类(它们是,对吗?)你只需要 #'make-instance 一个类型的对象,比如说,'integer?
【问题讨论】:
-
也许
(declare (type integer var))其中var是绑定到值30的变量(例如)? -
类型与 CLOS 是分开的。您可以使用
DECLARE/PROCLAIM/DECLAIM来声明变量/函数的类型。对于结构或类插槽,您可以使用:TYPE关键字,对于数组,您可以使用:ELEMENT-TYPE。例如,(let ((x 10)) (declare (type integer x)) ...)。声明类型时实际发生的情况取决于实现和优化设置。通常你需要提高速度来获得优化的代码,或者安全来进行类型检查。 -
类型不是 CLOS 类/对象。所有类都有对应的类型,但反之则不然。您无法保证代码在类型提示下运行得更快。 IMO 这意味着您可以在需要这些东西时编写代码并输入安全/速度提示,但这样做总是过早的优化
标签: types common-lisp typing typed