|
||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
Class Summary | |
Class | The metaclass Class. |
Constructor | The metaclass Constructor. |
Field | |
Import | |
Invokable | |
Item | |
Method | |
Modified | |
Package | |
Static |
The macro (define-class) lets you define Java class in Scheme. To Java, such a class looks just like and other Java class. The only difference is that its behavior is implemented in Scheme.
The classes in this directory are simple metaclasses used by (define-class). These classes are organized more consistantly than the java.lang.reflect classes are. Their behavior is written in JScheme.
For example, to sort a vector of integers, say, #(5 2 1 3 9 6 2 7 1) using Arrays.sort, you need an implementation of java.util.Comparator. This can defined like:
(define-class (package frog) (import java.util.Comparator) (public class Compare implements Comparator) ;; Design issue, fields must be public for Jscheme code to access. (public Procedure predicate) (public Compare (Procedure predicate) (.predicate$ this predicate)) (public boolean predicate (Object a Object b) ((.predicate$ this) a b)) (public int compare (Object a Object b) (cond ((.predicate this a b) -1) ((.predicate this b a) 1) (else 0))) (public boolean equals (Object that) (and (eq? (.getClass this) (.getClass that)) (eq? (.predicate$ this) (.predicate$ that)))) (public int hashCode () 0))
You can then sort the vector with:
(let ((a #(5 2 1 3 9 6 2 7 1))) (Arrays.sort a (frog.Compare. <)) a)
which produces:
#(1 1 2 2 3 5 6 7 9)
The (define-class) macro looks similar to the equivalent Java class. It consists of a sequence of clauses. The clauses can occur in any order, though it is convention to follow an order close to Java's.
define-class = "(" "define-class" head member* ")" head = package import* class|interface package = "(" "package" PACKAGENAME ")" import = "(" "import" FULLCLASSNAME|PACKAGENAME ".*" ")" class = "(" modifier* "class" extends? implements? ")" interface = "(" modifier* "interface" extends? ")" extends = "(" "extends" CLASSNAME+ ")" implements = "(" "implements" CLASSNAME+ ")" member = constructor|field|method|static constructor = "(" modifiers* name "(" arg* ")" exp* ")" field = "(" modifiers* type name (= value)? ")" method = "(" modifers* type "(" arg* ")" exp*")" static = "(" static exp* ")" type = Java type. value = exp arg = type name exp = {Scheme expression} name = {Java identifier}
Scheme files in this directory include:
|
||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |