27 квітня 2012

Kawa: import-many замість define-alias

В реализації Kawa мені не вистачає зручного аналога import. Але його можна зробити за допомогою макросу. Мені подобається підхід Clojure, але я копіював його не повністю. Ось що в мене вийшло:

; A macro to import several class defintions at once for Kawa scheme
(defmacro import-many (ns . classes)
  (cons 'begin
        (let loop ((shortname (car classes))
                   (rest (cdr classes)))
             (cons (list 'define-alias
                         shortname
                         (string->symbol
                           (string-append
                                 (symbol->string ns)
                                 "."
                                 (symbol->string shortname))))
                   (if (eqv? rest '())
                       '()
                       (loop (car rest) (cdr rest)))))))

У принципі, цього мені вже достатньо для комфортної роботи. Користатися так:

(import-many javax.swing JFrame JPanel JButton)
(import-many java.util Date Calendar)

Цей код еквівалентний такому:

(define-alias JFrame javax.swing.JFrame)
(define-alias JPanel javax.swing.JPanel)
(define-alias JButton javax.swing.JButton)
(define-alias Date java.util.Date)
(define-alias Calendar java.util.Calendar)

Погодьтеся, зручніше! :)

0 коментарів | Коментувати