2011-01-26 48 views
12

Tôi muốn bao gồm tất cả các chức năng được xác định trong một tập tin vợt nhất định để tôi có được hiệu ứng tương tự như khi chúng được sao chép. Có thể làm điều đó không?Bao gồm một tập tin bên ngoài trong vợt

Trả lời

12

Bạn có thể sử dụng include như sau:

Tạo một tập tin gọi "foo.rkt" trông như thế này:

(define x 1) 
(define y 2) 

Sau đó trong tập tin khác:

#lang racket 
(require racket/include) 
(include "foo.rkt") 
(+ x y) 

Bạn sẽ thấy kết quả 3 .

Bạn cũng có thể xem tài liệu cho số include.

+0

Sam, xin vui lòng đọc [Racket ngôn ngữ câu hỏi gắn thẻ: thẻ "plt-scheme" và "vợt"] (http://meta.stackexchange.com/q/74042/147036). –

+0

Đáng buồn thay, tôi không có đủ đại diện để bỏ phiếu cho các từ đồng nghĩa. –

+0

Xin lỗi vì đã đánh thức một chủ đề cũ, nhưng tại sao không có vợt #lang trong foo.rkt? – Manbroski

12

Để xuất các chức năng ra khỏi một mô-đun, bạn sử dụng provide, hãy xem xét một tập tin "foo.rkt":

#lang racket 
(define fortytwo 42) 
(define (det a b c) 
    (- (* b b) (* 4 a c))) 
(provide (fortytwo det)) 

File "bar.rkt" bây giờ có thể nhập các định nghĩa từ "foo.rkt":

#lang racket 
(require "foo.rkt") 
(define (baz a b c) 
    (+ (det a b c) (- c 4))) 

Cách khác bạn có thể cho phép các tệp khác có quyền truy cập vào mọi thứ được xác định trong tệp, đang sử dụng (all-defined-out):

#lang racket 
(define fortytwo 42) 
(define (det a b c) 
    (- (* b b) (* 4 a c))) 
(provide (all-defined-out)) 

Hy vọng điều đó sẽ hữu ích.

+1

Cũng lưu ý rằng có 'include', mà có thể là những gì các câu hỏi ban đầu về. –

+0

bằng cách nào đó bao gồm không làm việc trong trường hợp của tôi, nhưng giải pháp của bạn đã làm công việc. – dKab

+0

Tôi tin rằng cú pháp đúng để xuất khẩu hai chức năng đó là bốn mươi và det là '(cung cấp bốn mươi lần det)'. –

0

Bạn có thể sử dụng tải

(load "assert.scm") 
Các vấn đề liên quan