This is the mail archive of the
kawa@sources.redhat.com
mailing list for the Kawa project.
how to define constructor methods in Scheme?
- From: "Hoehle, Joerg-Cyril" <Joerg-Cyril dot Hoehle at t-systems dot com>
- To: kawa at sources dot redhat dot com
- Date: Mon, 17 Nov 2003 18:13:31 +0100
- Subject: how to define constructor methods in Scheme?
Hi,
I haven't found a way to define several or even a single constructor for a
module written in Kawa.
This makes my interface clumsier than I feel necessary and esp. worse than
equivalent Java code. I have to write
(let ((resolv (make <jch.nullResolver>)))
(invoke resolv 'set-root! node) ; extra function needed
...
instead of just
(make <jch.nullResolver> node)
as e.g. the NullURIReferenceResolver.java example in the xmlsec examples
section does:
...(new NullURIReferenceResolver(memoryData));
See xml-security-bin-1.0.5D2.zip:
http://xml.apache.org/security/Java/index.html
http://cvs.apache.org/viewcvs.cgi/xml-security/src/org/apache/xml/security/
src_samples/org/apache/xml/security/samples/signature/NullURIReferenceResolver.java
How can I define and pass arguments to a Kawa constructor?
Related is the question whether I can make use of the class-methods
procedure on functions written in Kawa. So far, I get duplicate definition
warnings during (file) compilation.
I would like to have several Scheme methods sharing a name and doing dispatching based on arguments (didn't I mention Oaklisp/T already? :).
BTW, will the variable named root below be shared by all instances?
Thanks for your help,
Jorg Hohle
Here's code:
;java -cp ..\lib\xmlsec.jar;..\lib\kawa-1.7.jar kawa.repl -P jch. -C jch/nullResolver.scm
(module-extends <org.apache.xml.security.utils.resolver.ResourceResolverSpi>)
(define (engineCanResolve
(uri :: <org.w3c.dom.Attr>)
(BaseURI :: <String>))
<boolean>
(format #t "uri : ~S~%" uri)
(format #t "base: ~S~%" BaseURI)
#t)
(define-private root :: <org.w3c.dom.Node> #!null)
(define (set-root! (node :: <org.w3c.dom.Node>)) <void>
(set! root node))
;;TODO how to define constructors?
(define (engineResolve
(uri :: <org.w3c.dom.Attr>)
(BaseURI :: <String>))
<org.apache.xml.security.signature.XMLSignatureInput>
(format #t "In engineResolve~%")
(let ((result :: <org.apache.xml.security.signature.XMLSignatureInput>
(make <org.apache.xml.security.signature.XMLSignatureInput>
root)))
result))