It is not writing, but reading. I'm making uinversal library for binary data (like dbf, mp3 id3 tags, and so on) mapping to objects https://github.com/Kalimehtar/binary-class
read-object simply ( define ( read-object binary-class in . args ) ( send ( apply make-object binary-class args ) read in )) But I don't like, that contract may not give correct error message for wrong nomber of items in args. Thu, 5 Jun 2014 12:31:49 -0400 от Matthias Felleisen <matth...@ccs.neu.edu>: > >Do you control the writing of objects to a port? If so, check out >'serialization.' If not, I don't think I can help you. Sorry -- Matthias > > > >On Jun 5, 2014, at 12:29 PM, Roman Klochkov < kalimeh...@mail.ru > wrote: > >> I don't control class creation. >> I need to make a wrapper around make-object and attach contract to the >> wrapper. >> >> Now I have >> (provide/contract >> [read-object (->i ([binary-class (implementation?/c binary<%>)] >> [port input-port?]) >> #:rest [args list?] >> [result (binary-class) (is-a?/c binary-class)])]) >> >> I cannot control number of args. Now, when error encountered I have >> confusing error message mentioning "instantiate". >> >> Thu, 5 Jun 2014 12:13:26 -0400 от Matthias Felleisen < matth...@ccs.neu.edu >> >: >> >> Here is the pattern I recommend: >> >> Welcome to Racket v6.0.1.11. >> > (define (create-c #:x [x 0]) (new c% [x x])) >> > (define c% (class object% (init-field x) (super-new))) >> >> That is, a class comes with a 'factory' definition, a function that creates >> instances and uses keywords similar to those used by the class initializer. >> If you then export these factories, you can enforce invariants and also >> probe the factory for the information you want: >> >> > (create-c) >> (object:c% ...) >> > (create-c #:x 10) >> (object:c% ...) >> > (procedure-arity create-c) >> 0 >> > (procedure-keywords create-c) >> '() >> '(#:x) >> >> >> Yes, one could argue that this is a poor man's substitute for missing class >> reflection. -- Matthias >> >> >> >> >> >> >> On Jun 5, 2014, at 11:32 AM, Roman Klochkov < kalimeh...@mail.ru > wrote: >> >> > For any procedure I can use procedure-arity. But how to get the number of >> > init arguments for a class? >> > >> > Or maybe there are any other way to make a contract, like in Guide 7.3.9, >> > where one can compare number of arguments and arity of the function, but >> > when using (make-object someclass ...) >> > instead of the function. >> > >> > >> > -- >> > Roman Klochkov >> > ____________________ >> > Racket Users list: >> > http://lists.racket-lang.org/users >> >> >> >> -- >> Roman Klochkov > -- Roman Klochkov
____________________ Racket Users list: http://lists.racket-lang.org/users