代码之家  ›  专栏  ›  技术社区  ›  owagh

为什么黏菌的“包装”与低级口齿不符?

  •  0
  • owagh  · 技术社区  · 7 年前

    我想我不清楚黏液是如何在Emacs中运行Lisp的。

    假设我有一个包含以下条目的文件:

    (defpackage "TEST"
      (:use "COMMON-LISP"))
    (in-package "TEST")
    *package*
    

    现在我编译/运行这三个命令

    C-c C-c
    C-x C-e
    

    我得到输出:

    #<PACKAGE "TEST">
    

    但是,如果我现在将buffers切换到较低的lisp buffer并键入

    *package*
    

    它给了我输出

    #<PACKAGE "COMMON-LISP-USER">
    

    什么给予?使用上面的slime命令显然可以做一些事情,但它似乎不会影响下面的lisp的主repl循环。

    2 回复  |  直到 7 年前
        1
  •  4
  •   Rainer Joswig mmmmmm    7 年前

    CL-USER> *package*
    #<The COMMON-LISP-USER package, 117/256 internal, 0/4 external>
    CL-USER> (defpackage "TEST"
               (:use "COMMON-LISP"))
    #<The TEST package, 0/16 internal, 0/16 external>
    CL-USER> (let ((*package* (find-package "TEST")))
               (intern "FOO"))
    

    所以不需要设置全局变量,可以重新绑定它们。

    (let ((*package* (find-package "FOO")))
      (eval (read-from-string some-string-with-code)))
    

    还可以创建线程,这样它们就有自己的“线程局部”全局变量:

    (sb-thread:make-thread (lambda (*package*)
                                        ...)
                           :arguments (list *package*))
    

    *package* 变量绑定。

    IDE和Globals

    IN-PACKAGE 上面的代码。编辑器还可以设置用于当前Lisp代码缓冲区的包。

    变量和/或使用多个线程

        2
  •  2
  •   Svante    7 年前

    in-package 在编译时从已编译的窗体向后搜索时找到的窗体,例如在使用 C-c C-c

    C-c C-~

    推荐文章