Previous: iklib records defs mixins, Up: iklib records defs [Index]
In a use of the syntax define-record-type
, the definition
clause:
(implements ?interface-name ...)
causes the listed interface names to be included in the list of
interfaces implemented by this record–type’s, (vicare-typed)Interface types. The clause implements
is accepted by
define-record-type
when the typed language is selected.
A record–type implements an interface when it implements a method for each method prototype included in the interface–type definition; the record–type can miss the implementation of interface–type methods having a default implementation. A record–type method matches an interface–type method prototype when: record–type method’s type signature is a sub–type of the method prototype.
The implements
clause causes a validation of the record–type’s
implemented methods against the interface’s method prototypes: if a
mismatch occurs, or a method is missing, an exception is raised at
expand–time.
Here is a simple example in which the record–type <blue>
implements the interface <IOne>
; the function fun
can be
applied to any object whose type implements the interface <IOne>
:
(define-interface-type <IOne> (method-prototype ione-doit (lambda () => (<number>)))) (define-record-type <blue> (implements <IOne>) (fields val) (method ({ione-doit <number>}) (+ 10 (.val this)))) (define (fun {O <IOne>}) (.ione-doit O)) (fun (new <blue> 1))) ⇒ 11
Another example in which the record–type <duo>
implements the
interface–type <Stringer>
which has a method ‘to-string’
with default implementation:
(define-interface-type <Stringer> (method (to-string) (with-output-to-string (lambda () (display this))))) (define-record-type <duo> (implements <Stringer>) (fields one two) (custom-printer (lambda ({this <duo>} port sub-printer) (display "#[duo " port) (display (.one this) port) (display #\space port) (display (.two this) port) (display #\] port)))) (define (fun {O <Stringer>}) (.to-string O)) (fun (new <duo> 1 2))) ⇒ "#[duo 1 2]"
Previous: iklib records defs mixins, Up: iklib records defs [Index]