summaryrefslogtreecommitdiff
path: root/_pastebins/2023-07-22-funcallable-amop.md
diff options
context:
space:
mode:
Diffstat (limited to '_pastebins/2023-07-22-funcallable-amop.md')
-rw-r--r--_pastebins/2023-07-22-funcallable-amop.md43
1 files changed, 0 insertions, 43 deletions
diff --git a/_pastebins/2023-07-22-funcallable-amop.md b/_pastebins/2023-07-22-funcallable-amop.md
deleted file mode 100644
index 37c79fe..0000000
--- a/_pastebins/2023-07-22-funcallable-amop.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-
-title: Funcallable AMOP
-
-date: 2023-07-22
-
-layout: post
-
-lang: en
-
-ref: funcallable-amop
-
----
-
-
-Using `macrolet` to allow a `funcallable-standard-class` to be invoked without
-using `funcall` directly, and let the macroexpansion do that instead:
-
-```
-#!/usr/bin/env li
-
-(asdf:load-system :closer-mop)
-
-(defclass constructor ()
- ((name :initarg :name :accessor constructor-name))
- (:metaclass closer-mop:funcallable-standard-class))
-
-(defmethod initialize-instance :after ((c constructor) &key)
- (with-slots (name) c
- (closer-mop:set-funcallable-instance-function
- c
- (lambda (x)
- (format t "~s: ~s - ~s~%" name :funcalled x)))))
-
-(let ((c (make-instance 'constructor :name "the-name")))
- (funcall c 1))
-
-(let ((c (make-instance 'constructor :name "the-name")))
- (macrolet ((c (&body body)
- `(funcall c ,@body)))
- (funcall c 2)
- (c 3)))
-```