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%)