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:
(export all))
 
(defun new-fish-class (species)
(let (((binary (id (size 128))) (: crypto rand_bytes 16))
(move-verb '"swam"))
(lambda (message)
(case message
('id
('id (lambda () (car (: io_lib format '"~32.16.0b" (list id)))))
(lambda (self)
(car
(: io_lib format
('id (lambda () (car (: io_lib format '"~32.16.0b" (list id)))))
('species
(lambda (self)
species))
('info
(lambda (self)
(: io format
'"id: ~p~nspecies: ~p~n"
(list (get-id self) (get-species self)))))
('move
(lambda (self distance)
(: io format
'"The ~s ~s ~p feet!~n"
(list species move-verb distance))))
('species (lambda () species))reproduce
('reproduce (lambda () (new-fish species))))))self)
(fish-class species)))))))
 
; define functionsa function used for interactingcalling withinto the object (class instance)
(defun get-method (object command)
(funcall object command))
Line 315 ⟶ 328:
; define object methods
(defun get-id (object)
(funcall (get-method object 'id) object))
 
(defun move (object distance)
(funcall (get-method object 'move) distance))
 
(defun get-species (object)
(funcall (get-method object 'species) object))
 
(defun get-info (object)
(funcall (get-method object 'info) object))
 
(defun move (object distance)
(funcall (get-method object 'move) object distance))
 
(defun reproduce (object)
(funcall (get-method object 'reproduce) object))
</lang>
 
Line 331 ⟶ 347:
> (slurp '"aquarium.lfe")
#(ok object)
> (set mommy-fish (new-fish-class '"Carp"))
#Fun<lfe_eval.10.91765564>
> (get-species mommy-fish)
Line 344 ⟶ 360:
> (get-id mommy-fish)
"c549d68e63fedd0a631c5045ccd8fd7f"
> (get-idinfo baby-fish)
id: "63f14d20e7c6fbffb6b692bfaf15f845"
species: "Carp"
ok
</lang>