Racket 编程

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 项目的骨架。掌握 providerequire 和子模块,你就能写出结构清晰、可维护的代码。