Inheritance/Single: Difference between revisions

Content deleted Content added
Kazinator (talk | contribs)
Line 1,703: Line 1,703:
<lang txr>(defstruct animal nil
<lang txr>(defstruct animal nil
name
name
(get-name
(:method get-name (me)
(if me.name me.name (error `get-name: animal @me has no name`)))
(lambda (me)
(:method speak (me stream)
(if me.name me.name (error `get-name: animal @me has no name`))))
(error "abstract animal cannot speak")))
(speak
(lambda (me stream)
(error "abstract animal cannot speak"))))


(defstruct dog animal
(defstruct dog animal
(:method speak (me : (stream *stdout*))
(speak
(lambda (me : (stream *stdout*))
(put-line `@{me.(get-name)}: bark!` stream)))
(put-line `@{me.(get-name)}: bark!` stream))))


(defstruct cat animal
(defstruct cat animal
(speak (lambda (me : (stream *stdout*))
(:method speak (me : (stream *stdout*))
(put-line `@{me.(get-name)}: meow!` stream))))
(put-line `@{me.(get-name)}: meow!` stream)))


(defstruct lab dog)
(defstruct lab dog)