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 new-fish (species)
(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
('id (lambda () (car (: io_lib format '"~32.16.0b" (list id)))))
(lambda (self)
(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
('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))))
('species (lambda () species))
('reproduce
('reproduce (lambda () (new-fish species)))))))
(lambda (self)
(fish-class species)))))))


; define functions for interacting with the object
; 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 move (object distance)
(funcall (get-method object 'move) distance))


(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 move (object distance)
(funcall (get-method object 'move) object distance))


(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 (new-fish '"Carp"))
> (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-id baby-fish)
> (get-info baby-fish)
"63f14d20e7c6fbffb6b692bfaf15f845"
id: "63f14d20e7c6fbffb6b692bfaf15f845"
species: "Carp"
ok
</lang>
</lang>