次の2つのクラスがあります。
(defclass person () ())
(defmethod speak ((s person) string)
(format t "-A" string))
(defmethod speak :before ((s person) string)
(print "Hello! "))
(defmethod speak :after ((s person) string)
(print "Have a nice day!"))
(defclass speaker (person) ())
(defmethod speak ((i speaker) string)
(print "Bonjour!"))
(speak (make-instance 'speaker) "Can I help yoU?")
そして、これの出力は次のとおりです。
"Hello! "
"Bonjour!"
"Have a nice day!"
私が理解しようとしているのは、これらのメソッドが「順序」に関してどのように実行されるかです。何が起こっているのか、その理由を理解できないようです。おそらくこれにはルールの優先順位がありますが、どこにあるのかわかりません。たとえば、"Hello!Can I help you"
この場合、なぜ発砲しないのでしょうか?