[編集]
C-x C-b
どちらとも仕事ができません#lang
。
しかし、 を含むバッファ#lang
は、Geiser から開始された REPL に送信できますC-c C-a
。これは、Geiser ドロップダウン メニューからREPL に切り替えてモジュールに入るというものです。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
別のモジュール [またはファイルのバッファー] に切り替えたい場合は,enter
、REPL で次のコマンドを使用できます。
racket@bugsy.rkt> ,enter "clyde.rkt"
racket@clyde.rkt> ,enter "bonny.rkt"
racket@bonny.rkt>
,enter
ドキュメントにコマンドの例があります。恐竜の上を見てください。
[オリジナル]
ラケットのドキュメントによると、#lang
構文は非常に単純であり、リーダーは基本的に、スペース文字の後に続くものから言語構文をブートストラップします#lang
。これはある意味で#lang
、Racket [または他の言語] の構文にないことを意味します。代わりに、より大きな「Racket」開発エコシステムの一部を形成するリーダーの実装機能です。
Geiser [およびおそらく Quack とラケットモード]#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 モードの 1 つがニーズを満たさない場合に、独自のコードを展開するための出発点となる可能性があります。