initial
This commit is contained in:
21
context.zp
Normal file
21
context.zp
Normal file
@@ -0,0 +1,21 @@
|
||||
(define-syntax with
|
||||
(syntax-rules
|
||||
"use a context manager. Takes a value, name and body
|
||||
and binds value to name in body. Ensures resource cleanup.
|
||||
|
||||
params:
|
||||
- val: the value to bind
|
||||
- var: the name to bind to
|
||||
- body: varargs for the body
|
||||
complexity: O(1)
|
||||
returns: the result of the resource cleanup"()
|
||||
((_ val var body ...)
|
||||
(let ((var val))
|
||||
(begin
|
||||
body ...
|
||||
(teardown var))))))
|
||||
|
||||
(defprotocol context-manager ((teardown 1)))
|
||||
(defimpl context-manager input-port? ((teardown close-input-file)))
|
||||
(defimpl context-manager output-port? ((teardown close-output-file)))
|
||||
(defimpl context-manager net:socket? ((teardown net:close-socket)))
|
Reference in New Issue
Block a user