This is the mail archive of the kawa@sources.redhat.com mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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))


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]