diff options
Diffstat (limited to '_pastebins/2023-07-22-funcallable-amop.md')
-rw-r--r-- | _pastebins/2023-07-22-funcallable-amop.md | 43 |
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))) -``` |