在REPL中使用#lang设置语言

 安晗夕Brooke 发布于 2023-02-05 07:47

我想动态设置REPL中的语言,而#lang不是使用"-I"命令行参数.但这给了我错误"读取:#lang在当前上下文中未启用".

是否有我缺少的命令行开关?或者也许我可以使用",metacommand"?我需要这个的原因是因为我希望能够将一个Emacs缓冲区发送到Racket REPL,但是如果该文件以#lang.

1 个回答
  • [编辑]

    我也无法C-x C-b与之合作#lang.

    但是包含的缓冲区#lang可以发送到从Geiser启动的REPL中C-c C-a.这是从Geiser下拉菜单切换到REPL和Enter Module.如果我有bugsy.rkt的缓冲区:

    ;; bugsy.rkt
    #lang racket
    (define k 6)
    (define j 7)
    (define (f lhs rhs)
       (+ lhs rhs))
    

    打字C-c C-a在REPL给我这个:

    racket@> ,enter "<filepath>/bugsy.rkt"
    racket@bugsy.rkt>
    

    然后我可以访问REPL中的模块:

    racket@bugsy.rkt> k
    6
    racket@bugsy.rkt> (f 3 4)
    7
    

    如果我想切换到另一个模块[或文件的缓冲区],我可以使用,enterREPL中的命令:

    racket@bugsy.rkt> ,enter "clyde.rkt"
    racket@clyde.rkt> ,enter "bonny.rkt"
    racket@bonny.rkt>
    

    ,enter文档中有一个命令示例.看看恐龙之上.

    [原版的]

    根据Racket文档#lang 具有非常简单的语法,读者本质上是从后面的空格字符后面的任何内容引导语言语法#lang.这在某种意义上意味着#lang不是在Racket的[或任何其他语言]语法中.相反,它是读者的一个实现功能,它构成了更大的"Racket"开发生态系统的一部分.

    Geiser [并且可能是Quack和racket-mode]通过#lang在将代码传递给Racket REPL之前在elsip中解析来处理此问题.在Geiser中,工作是在geiser-racket.el中完成的.

    解析函数位于第132行:

    (defun geiser-racket--language ()
      (or (cdr (geiser-racket--explicit-module))
          (save-excursion
            (goto-char (point-min))
            (if (re-search-forward "^#lang +\\([^ ]+\\)" nil t)
                (geiser-syntax--form-from-string (match-string-no-properties 1))))
          "#f"))
    

    它由geiser-racket--geiser-procedure第166行调用.

    (defun geiser-racket--geiser-procedure (proc &rest args)
      (case proc
        ((eval compile)
         (format ",geiser-eval %s %s %s"
                 (or (car args) "#f")
                 (geiser-racket--language)
                 (mapconcat 'identity (cdr args) " ")))
        ((load-file compile-file)
         (format ",geiser-load %S" (geiser-racket--find-module)))
        ((no-values) ",geiser-no-values")
        (t (format ",apply geiser:%s (%s)" proc (mapconcat 'identity args " ")))))
    

    如果其中一个现有的Emacs模式不能满足您的需求,那么这可能会为您提供滚动自己代码的起点.

    2023-02-05 08:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有