第 1 部分 · Racket 核心
模块系统
模块系统
理解 Racket 的模块机制,学会组织代码、管理依赖和提供接口。
模块基础
Racket 的每个文件就是一个模块。#lang 行声明了模块使用的语言:
#lang racket ;; 这个文件本身就是一个模块 (define (greet name) (string-append "Hello, " name "!")) (provide greet) ; 导出给外部使用
provide 与 require
;; math-utils.rkt #lang racket (provide add multiply square) (define (add x y) (+ x y)) (define (multiply x y) (* x y)) (define (square x) (* x x)) (define (internal-helper x) ...) ; 未导出,外部不可见
;; main.rkt #lang racket (require "math-utils.rkt") (square 5) ; => 25 (multiply 3 4) ; => 12
控制导出
;; 只导出特定绑定 (provide greet farewell) ;; 导出所有(不推荐) (provide (all-defined-out)) ;; 导出并重命名 (provide (rename-out [my-add add]))
子模块
使用 module 关键字在文件内定义子模块:
#lang racket (define (main-func x) (* x (helper x))) (module helpers racket (provide helper) (define (helper x) (+ x 1))) (require 'helpers)
包管理
使用 raco pkg 管理外部依赖:
# 安装包
raco pkg install package-name
# 列出已安装的包
raco pkg show
# 更新包
raco pkg update --all
小结
模块系统是大型 Racket 项目的骨架。掌握 provide、require 和子模块,你就能写出结构清晰、可维护的代码。