Racket:模块导出类的公共函数的语法

Racket:模块导出类的公共函数的语法,racket,Racket,如何使用提供,以便模块从类导出所有公共函数 在这个网站上,我了解了如何从结构导出所有get/set函数[1]。我没有找到任何类的语法 #lang racket (provide (struct-out foo-struct)) (struct foo-struct (biz bop)) [1] book.rkt: #lang racket (provide book-class%) (define book-class% (class object% (field (pages

如何使用
提供
,以便
模块
导出所有公共函数

在这个网站上,我了解了如何从结构导出所有get/set函数[1]。我没有找到任何类的语法

#lang racket
(provide (struct-out foo-struct))
(struct foo-struct (biz bop))
[1]
book.rkt

#lang racket

(provide book-class%)

(define book-class%
  (class object%
    (field (pages 5))
    (define/public (letters)
      (* pages 500))
    (super-new)))
在另一个文件中:

#lang racket

(require "book.rkt")

(define class-o (new book-class%))

(send class-o letters)
; => 2500
define/public用于使类中的方法公开,导出类时,该函数可与
send
一起使用

book.rkt

#lang racket

(provide book-class%)

(define book-class%
  (class object%
    (field (pages 5))
    (define/public (letters)
      (* pages 500))
    (super-new)))
在另一个文件中:

#lang racket

(require "book.rkt")

(define class-o (new book-class%))

(send class-o letters)
; => 2500

define/public用于使类中的方法公开,导出类时,该函数可与
send
一起使用

TLDR:只需提供类值即可

struct
表单定义了访问器、设置器、谓词、构造函数等。因此,如果您希望您的客户机具有操作结构的全部功能,则需要提供它们:

(struct foo (bar) #:mutable)
;; this defines
;; constructor: foo
;; accessors: foo-bar
;; setters: set-foo-bar!
;; predicate: foo?
另一方面,
class
表单返回一个一流的类值,并且根本不定义任何内容。然后,可以使用诸如
new
send
之类的表单(已经由
#lang racket
提供)来利用类值

因此,只需提供绑定到此类值的标识符就足够了。下面是一个例子:

;; lib.rkt

#lang racket

(define human% 
  (class object% (super-new)
    (define/public (speak)
      (displayln "hello world!"))))

(provide human%)

TLDR:您只需要提供类值

struct
表单定义了访问器、设置器、谓词、构造函数等。因此,如果您希望您的客户机具有操作结构的全部功能,则需要提供它们:

(struct foo (bar) #:mutable)
;; this defines
;; constructor: foo
;; accessors: foo-bar
;; setters: set-foo-bar!
;; predicate: foo?
另一方面,
class
表单返回一个一流的类值,并且根本不定义任何内容。然后,可以使用诸如
new
send
之类的表单(已经由
#lang racket
提供)来利用类值

因此,只需提供绑定到此类值的标识符就足够了。下面是一个例子:

;; lib.rkt

#lang racket

(define human% 
  (class object% (super-new)
    (define/public (speak)
      (displayln "hello world!"))))

(provide human%)