Next: , Previous: Simple Advice, Up: Advising Functions   [Contents][Index]


16.2 ¥¢¥É¥Ð¥¤¥¹ÄêµÁ

¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤òÄêµÁ¤¹¤ë¤Ë¤Ï¡¢¥Þ¥¯¥ídefadvice¤ò»È¤¤¤Þ¤¹¡£ defadvice¤Î¸Æ¤Ó½Ð¤·¤Ï¤Ä¤®¤Î¤è¤¦¤Ê¹½Ê¸¤Ç¤¹¡£ defun¤ädefmacro¤Î¹½Ê¸¤ò´ð¤Ë¤·¤Æ¤¤¤Þ¤¹¤¬¡¢ ÄɲÃÉôʬ¤¬¤¢¤ê¤Þ¤¹¡£

(defadvice function (class name
                         [position] [arglist]
                         flags...)
  [documentation-string]
  [interactive-form]
  body-forms...)

¤³¤³¤Ç¡¢function¤Ï¥¢¥É¥Ð¥¤¥¹ÂÐ¾Ý¤È¤Ê¤ë´Ø¿ô ¡Ê¤ä¥Þ¥¯¥í¤ä¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¡Ë¤Ç¤¹¡£ °Ê¸å¡¢¥¢¥É¥Ð¥¤¥¹¤¹¤ëÂоݤòñ¤Ë¡Ø´Ø¿ô¡Ù¤È½ñ¤­¤Þ¤¹¤¬¡¢ ¤³¤ì¤Ë¤Ï¤Ä¤Í¤Ë¥Þ¥¯¥í¤ä¥¹¥Ú¥·¥ã¥ë¥Õ¥©¡¼¥à¤ò´Þ¤ß¤Þ¤¹¡£

class¤Ï¥¢¥É¥Ð¥¤¥¹¤Î¥¯¥é¥¹¤ò»ØÄꤷ¡¢ before¡¢after¡¢around¤Î¤¤¤º¤ì¤«¤Ç¤¹¡£ »öÁ°¥¢¥É¥Ð¥¤¥¹¡Êbefore¡Ë¤Ï´Ø¿ô¤½¤Î¤â¤Î¤Î¤Þ¤¨¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ »ö¸å¥¢¥É¥Ð¥¤¥¹¡Êafter¡Ë¤Ï´Ø¿ô¤½¤Î¤â¤Î¤Î¤¢¤È¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ Êñ°Ï¥¢¥É¥Ð¥¤¥¹¡Êaround¡Ë¤Ï´Ø¿ô¼«¿È¤Î¼Â¹Ô¤òÊñ¤ß¹þ¤ß¤Þ¤¹¡£ »ö¸å¥¢¥É¥Ð¥¤¥¹¤ÈÊñ°Ï¥¢¥É¥Ð¥¤¥¹¤Ç¤Ï¡¢ ad-return-value¤ËÀßÄꤹ¤ë¤³¤È¤ÇÌá¤êÃͤòÊѹ¹¤Ç¤­¤Þ¤¹¡£

Variable: ad-return-value

¥¢¥É¥Ð¥¤¥¹¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¤È¤­¡¢ ´Ø¿ô¤Î¸µÄêµÁ¤Î¼Â¹Ô¤ò´°Î»¤·¤¿¤¢¤È¤Ç¤Ï¡¢¤³¤ÎÊÑ¿ô¤Ï¤½¤ÎÌá¤êÃͤòÊÝ»ý¤¹¤ë¡£ ¤¹¤Ù¤Æ¤Î¥¢¥É¥Ð¥¤¥¹¤ò´°Î»¤¹¤ë¤È¡¢ºÇ½ªÅª¤Ë¤Ï¡¢¤³¤ÎÃͤò¸Æ¤Ó½Ð¤·Â¦¤ØÊÖ¤¹¡£ »ö¸å¥¢¥É¥Ð¥¤¥¹¤ÈÊñ°Ï¥¢¥É¥Ð¥¤¥¹¤Ç¤Ï¡¢¤³¤ÎÊÑ¿ô¤ËÊ̤ÎÃͤòÀßÄꤹ¤ë¤³¤È¤Ç Ìá¤êÃͤòÊѹ¹¤Ç¤­¤ë¡£

°ú¿ôname¤Ï¥¢¥É¥Ð¥¤¥¹¤Î̾Á°¤Ç¤¢¤ê¡¢nil°Ê³°¤Î¥·¥ó¥Ü¥ë¤Ç¤¹¡£ ¥¢¥É¥Ð¥¤¥¹Ì¾¤Ï¡¢function¤ÎÆÃÄꥯ¥é¥¹¤Î¤¹¤Ù¤Æ¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤«¤é 1¤Ä¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤ò°ì°Õ¤Ë¼±Ê̤·¤Þ¤¹¡£ ̾Á°¤Ç¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤ò»²¾È¤Ç¤­¡¢ ¤½¤ì¤òºÆÄêµÁ¤·¤¿¤êÍ­¸ú¤Ë¤·¤¿¤ê̵¸ú¤Ë¤Ç¤­¤Þ¤¹¡£

Ä̾ï¤Î´Ø¿ôÄêµÁ¤Î°ú¿ô¥ê¥¹¥È¤Î¤«¤ï¤ê¤Ë¡¢ ¥¢¥É¥Ð¥¤¥¹ÄêµÁ¤Ç¤Ï°Û¤Ê¤ë¾ðÊó¤òɬÍפȤ·¤Þ¤¹¡£

¾Êά²Äǽ¤Êposition¤Ï¡¢»ØÄꤷ¤¿class¤Î ¸½ºß¤Î¥¢¥É¥Ð¥¤¥¹¥ê¥¹¥È¤Î¤É¤³¤Ë¿·¤¿¤Ê¥¢¥É¥Ð¥¤¥¹¤òÃÖ¤¯¤«¤ò»ØÄꤷ¤Þ¤¹¡£ first¡¢last¡¢¤¢¤ë¤¤¤Ï¡¢ 0¤«¤é¿ô¤¨»Ï¤á¤ë°ÌÃÖ¤ò»ØÄꤹ¤ë¿ô¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹ ¡Êfirst¤Ï0¤ÈÅù²Á¡Ë¡£ °ÌÃÖ¤ò»ØÄꤷ¤Ê¤¤¤È¥Ç¥Õ¥©¥ë¥È¤Ïfirst¤Ç¤¹¡£ Åö³º¥¯¥é¥¹¤Î´û¸°ÌÃÖ¤ÎÈϰϤòͤ¨¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢ ÀèÆ¬¤«ËöÈø¤Î¤É¤Á¤é¤«¶á¤¤¤Û¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ ´û¸¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤òºÆÄêµÁ¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢ÃÍposition¤Ï̵»ë¤µ¤ì¤Þ¤¹¡£

¾Êά²Äǽ¤Êarglist¤Ï¡¢ ¥¢¥É¥Ð¥¤¥¹¤¬»È¤¦°ú¿ô¥ê¥¹¥È¤òÄêµÁ¤¹¤ë¤¿¤á¤Ë»È¤¤¤Þ¤¹¡£ ¤³¤ì¤Ï¡¢¥¢¥É¥Ð¥¤¥¹¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤ËÀ¸À®¤µ¤ì¤ë·ë¹çÄêµÁ ¡Êsee Combined Definition¡Ë¤Î°ú¿ô¥ê¥¹¥È¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤½¤Î·ë²Ì¡¢¥¢¥É¥Ð¥¤¥¹¤Î¼°¤Ç¤Ï¡¢ °ú¿ô¤ÎÃͤò»²¾È¤¹¤ë¤¿¤á¤Ë¤³¤Î¥ê¥¹¥È¤Î°ú¿ôÊÑ¿ô¤ò»È¤¨¤Þ¤¹¡£

¤³¤Î°ú¿ô¥ê¥¹¥È¤Ï¡¢´Ø¿ô¤Î¼ÂºÝ¤Î¸Æ¤Ó½Ð¤·Êý¤ò°·¤¨¤ë¤è¤¦¤Ë¡¢ ¤â¤È¤Î´Ø¿ô¤Î°ú¿ô¥ê¥¹¥È¤È¸ß´¹À­¤¬¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ 2¤Ä°Ê¾å¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊҤǰú¿ô¥ê¥¹¥È¤ò»ØÄꤷ¤Æ¤¤¤ë¾ì¹ç¡¢ ¤¹¤Ù¤Æ¤Î¥¢¥É¥Ð¥¤¥¹¥¯¥é¥¹¤ÎÃæ¤ÇºÇ½é¤Î¤â¤Î¡Ê°ÌÃÖ¤¬ºÇ¾®¤Î¤â¤Î¡Ë¤ò»È¤¤¤Þ¤¹¡£

»Ä¤ê¤ÎÍ×ÁÇflags¤Ï¡¢¤³¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊҤλȤ¤Êý¤Ë´Ø¤¹¤ë¾ðÊó¤ò»ØÄꤹ¤ë ¥·¥ó¥Ü¥ë¤Ç¤¹¡£ Àµ¤·¤¤¥·¥ó¥Ü¥ë¤È¤½¤ì¤é¤Î°ÕÌ£¤Ï¤Ä¤®¤Î¤È¤ª¤ê¤Ç¤¹¡£

activate

function¤ËÂФ¹¤ë¥¢¥É¥Ð¥¤¥¹¤ò¤¿¤À¤Á¤Ë³èÀ­¤Ë¤¹¤ë¡£ ´Ø¿ô¤Î¥¢¥É¥Ð¥¤¥¹¤ËÂФ¹¤ëÊѹ¹¤Ï¡¢Åö³º´Ø¿ô¤Î¥¢¥É¥Ð¥¤¥¹¤ò³èÀ­¤Ë¤¹¤ë¤È ¸ú²Ì¤ò»ý¤Ä¤è¤¦¤Ë¤Ê¤ë¡£ ¤³¤Î¥Õ¥é¥°¤Ï¡¢function¤ËÂФ¹¤ë¤³¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤òÄêµÁ¤·¤¿Ä¾¸å¤Ë ¤½¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤ò»Ø¼¨¤¹¤ë¡£

function¤¬Ì¤ÄêµÁ¡Ê̤ÄêµÁ¤Î¥¢¥É¥Ð¥¤¥¹¡Êforward advice¡Ë¤È¸Æ¤Ö¾õ¶·¡Ë ¤Ç¤¢¤ë¤È¤³¤Î¥Õ¥é¥°¤Ë¤Ï¤Ê¤ó¤Î¸ú²Ì¤â¤Ê¤¤¡£ ¤È¤¤¤¦¤Î¤Ï¡¢Ì¤ÄêµÁ´Ø¿ô¤Î¥¢¥É¥Ð¥¤¥¹¤Ï³èÀ­¤Ë¤Ç¤­¤Ê¤¤¤«¤é¤Ç¤¢¤ë¡£ ¤·¤«¤·¡¢function¤òÄêµÁ¤¹¤ë¤È¤½¤Î¥¢¥É¥Ð¥¤¥¹¤Ï¼«Æ°Åª¤Ë³èÀ­¤Ë¤µ¤ì¤ë¡£

protect

¤³¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤ò¤½¤ì¤è¤ê¤Þ¤¨¤Ë¼Â¹Ô¤µ¤ì¤ë¥³¡¼¥É¤ä¥¢¥É¥Ð¥¤¥¹¤Ë¤è¤ë Èó¥í¡¼¥«¥ëæ½Ð¤ä¥¨¥é¡¼¤ËÂФ·¤ÆÊݸ¤ë¡£ Êݸ¤¿¥¢¥É¥Ð¥¤¥¹ÃÇÊҤϡ¢ ¥Õ¥©¡¼¥àunwind-protect¤ÎÃæ¤Ë¸å»ÏËö¤È¤·¤ÆÃÖ¤«¤ì¡¢ ¤½¤ì¤è¤ê¤Þ¤¨¤Ë¼Â¹Ô¤µ¤ì¤ë¥³¡¼¥É¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤êthrow¤ò»È¤Ã¤Æ¤â ¼Â¹Ô¤µ¤ì¤ë¡£ see Cleanups¡£

compile

¥¢¥É¥Ð¥¤¥¹¤Î¼Â¹Ô¤Ë»È¤ï¤ì¤ë·ë¹çÄêµÁ¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¡£ activate¤È¤È¤â¤Ë»ØÄꤷ¤Ê¤¤¤È¡¢¤³¤Î¥Õ¥é¥°¤Ï̵»ë¤¹¤ë¡£ see Combined Definition¡£

disable

¤³¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤òÅö½é¤Ï̵¸ú¤Ë¤·¤Æ¤ª¤­¡¢ ¤Î¤Á¤ËÌÀ¼¨Åª¤ËÍ­¸ú¤Ë¤·¤Ê¤¤¸Â¤ê»È¤ï¤ì¤Ê¤¤¡£ see Enabling Advice¡£

preactivate

¤³¤Îdefadvice¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¤ê¥Þ¥¯¥íŸ³«¤·¤¿¤È¤­¤Ë¡¢ function¤ËÂФ¹¤ë¥¢¥É¥Ð¥¤¥¹¤ò³èÀ­¤Ë¤¹¤ë¡£ ¤³¤ì¤Ë¤è¤ê¸½ºß¤Î¥¢¥É¥Ð¥¤¥¹¤Î¾õÂ֤˱þ¤¸¤¿¥¢¥É¥Ð¥¤¥¹ÄêµÁ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¡¢ ɬÍפ˱þ¤¸¤Æ»È¤ï¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£

¤³¤Îdefadvice¤ò¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¾ì¹ç¤Ë¤Î¤ß°ÕÌ£¤ò»ý¤Ä¡£

¾Êά²Äǽ¤Êdocumentation-string¤Ï¡¢ ¤³¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤ÎÀâÌÀʸ»úÎó¤Ë¤Ê¤ê¤Þ¤¹¡£ function¤ËÂФ¹¤ë¥¢¥É¥Ð¥¤¥¹¤¬³èÀ­¤Ç¤¢¤ë¤È¡¢ ¡Êdocumentation¤¬ÊÖ¤¹¡Ëfunction¤ÎÀâÌÀʸ¤Ï¡¢ ´Ø¿ô¤Î¸µÄêµÁ¤ÎÀâÌÀʸ»úÎó¤Èfunction¤Î¥¢¥É¥Ð¥¤¥¹¤¹¤Ù¤Æ¤ÎÀâÌÀʸ»úÎó¤Î ¹çÀ®¤Ë¤Ê¤ê¤Þ¤¹¡£

¾Êά²Äǽ¤Êinteractive-form¤Ï¡¢ ¸µ´Ø¿ô¤ÎÂÐÏÃŪ¤Õ¤ë¤Þ¤¤¤òÊѹ¹¤¹¤ë¤¿¤á¤Ë»ØÄꤷ¤Þ¤¹¡£ 2¤Ä°Ê¾å¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤Çinteractive-form¤ò»ØÄꤷ¤Æ¤¤¤ë¾ì¹ç¡¢ ¤¹¤Ù¤Æ¤Î¥¢¥É¥Ð¥¤¥¹¤ÎÃæ¤ÇºÇ½é¤Î¤â¤Î¡Ê°ÌÃÖ¤¬ºÇ¾®¤Î¤â¤Î¡Ë¤¬Í¥À褷¤Þ¤¹¡£

¶õ¥ê¥¹¥È¤Ç¤â¤«¤Þ¤ï¤Ê¤¤body-forms¤Ï¡¢¥¢¥É¥Ð¥¤¥¹¤ÎËÜÂΤǤ¹¡£ ¥¢¥É¥Ð¥¤¥¹¤ÎËÜÂΤǤϡ¢°ú¿ô¡¢Ìá¤êÃÍ¡¢Â«Çû´Ä¶­¤ò»²¾È¡¿Êѹ¹¤·¤¿¤ê¡¢ ¤¤¤«¤Ê¤ë¼ïÎà¤ÎÉûºîÍѤòµ¯¤³¤»¤Þ¤¹¡£

·Ù¹ð¡§ ¥Þ¥¯¥í¤ò¥¢¥É¥Ð¥¤¥¹¤¹¤ë¾ì¹ç¡¢ ¥Þ¥¯¥í¤Ï¥×¥í¥°¥é¥à¤Î¥³¥ó¥Ñ¥¤¥ë»þ¤ËŸ³«¤µ¤ì¤ë¤Î¤Ç¤¢¤Ã¤Æ¡¢ ¥³¥ó¥Ñ¥¤¥ë¤·¤¿¥×¥í¥°¥é¥à¤Î¼Â¹Ô»þ¤ËŸ³«¤µ¤ì¤ë¤Î¤Ç¤Ï¤Ê¤¤¤³¤È¤ËÃí°Õ¡£ ¥¢¥É¥Ð¥¤¥¹¤¬»ÈÍѤ¹¤ë¤¹¤Ù¤Æ¤Î¥µ¥Ö¥ë¡¼¥Æ¥£¥ó¤Ï¡¢ ¥Ð¥¤¥È¥³¥ó¥Ñ¥¤¥é¤¬¥Þ¥¯¥í¤òŸ³«¤¹¤ë¤È¤­¤ËɬÍפˤʤ롣