Call an object method: Difference between revisions
Content added Content deleted
m (→{{header|LFE}}: Removed unused 'send' function.) |
(→{{header|LFE}}: Updated to show how methods can call other methods) |
||
Line 295: | Line 295: | ||
(export all)) |
(export all)) |
||
(defun |
(defun fish-class (species) |
||
(let (((binary (id (size 128))) (: crypto rand_bytes 16)) |
(let (((binary (id (size 128))) (: crypto rand_bytes 16)) |
||
(move-verb '"swam")) |
(move-verb '"swam")) |
||
(lambda (message) |
(lambda (message) |
||
(case message |
(case message |
||
('id |
|||
⚫ | |||
(lambda (self) |
|||
(car |
|||
(: io_lib format |
|||
⚫ | |||
('species |
|||
(lambda (self) |
|||
species)) |
|||
('info |
|||
(lambda (self) |
|||
(: io format |
|||
'"id: ~p~nspecies: ~p~n" |
|||
(list (get-id self) (get-species self))))) |
|||
('move |
('move |
||
(lambda (distance) |
(lambda (self distance) |
||
(: io format |
(: io format |
||
'"The ~s ~s ~p feet!~n" |
'"The ~s ~s ~p feet!~n" |
||
(list species move-verb distance)))) |
(list species move-verb distance)))) |
||
(' |
('reproduce |
||
(lambda (self) |
|||
(fish-class species))))))) |
|||
; define |
; define a function used for calling into the object (class instance) |
||
(defun get-method (object command) |
(defun get-method (object command) |
||
(funcall object command)) |
(funcall object command)) |
||
Line 315: | Line 328: | ||
; define object methods |
; define object methods |
||
(defun get-id (object) |
(defun get-id (object) |
||
(funcall (get-method object 'id))) |
(funcall (get-method object 'id) object)) |
||
⚫ | |||
⚫ | |||
(defun get-species (object) |
(defun get-species (object) |
||
(funcall (get-method object 'species))) |
(funcall (get-method object 'species) object)) |
||
(defun get-info (object) |
|||
(funcall (get-method object 'info) object)) |
|||
⚫ | |||
⚫ | |||
(defun reproduce (object) |
(defun reproduce (object) |
||
(funcall (get-method object 'reproduce))) |
(funcall (get-method object 'reproduce) object)) |
||
</lang> |
</lang> |
||
Line 331: | Line 347: | ||
> (slurp '"aquarium.lfe") |
> (slurp '"aquarium.lfe") |
||
#(ok object) |
#(ok object) |
||
> (set mommy-fish ( |
> (set mommy-fish (fish-class '"Carp")) |
||
#Fun<lfe_eval.10.91765564> |
#Fun<lfe_eval.10.91765564> |
||
> (get-species mommy-fish) |
> (get-species mommy-fish) |
||
Line 344: | Line 360: | ||
> (get-id mommy-fish) |
> (get-id mommy-fish) |
||
"c549d68e63fedd0a631c5045ccd8fd7f" |
"c549d68e63fedd0a631c5045ccd8fd7f" |
||
> (get- |
> (get-info baby-fish) |
||
"63f14d20e7c6fbffb6b692bfaf15f845" |
id: "63f14d20e7c6fbffb6b692bfaf15f845" |
||
species: "Carp" |
|||
ok |
|||
</lang> |
</lang> |
||