Previous: Subr Arguments, Up: Advising Functions   [Contents][Index]


16.10 ·ë¹çÄêµÁ

´Ø¿ô¤Ë¤Ï¡¢n¸Ä¤Î»öÁ°¥¢¥É¥Ð¥¤¥¹¡Êbefore-advice¡Ë¡¢ m¸Ä¤ÎÊñ°Ï¥¢¥É¥Ð¥¤¥¹¡Êaround-advice¡Ë¡¢ k¸Ä¤Î»ö¸å¥¢¥É¥Ð¥¤¥¹¡Êafter-advice¡Ë¤¬¤¢¤ë¤È¤·¤Þ¤¹¡£ Êݸ¤¿¥¢¥É¥Ð¥¤¥¹ÃÇÊҤϤʤ¤¤È²¾Äꤹ¤ë¤È¡¢ ´Ø¿ô¤Î¥¢¥É¥Ð¥¤¥¹¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤ËºîÀ®¤µ¤ì¤ë·ë¹çÄêµÁ¤Ï ¤Ä¤®¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

(lambda arglist
  [ [advised-docstring] [(interactive ...)] ]
  (let (ad-return-value)
    before-0-body-form...
         ....
    before-n-1-body-form...
    around-0-body-form...
       around-1-body-form...
             ....
          around-m-1-body-form...
             (setq ad-return-value
                   apply original definition to arglist)
          other-around-m-1-body-form...
             ....
       other-around-1-body-form...
    other-around-0-body-form...
    after-0-body-form...
          ....
    after-k-1-body-form...
    ad-return-value))

¥Þ¥¯¥í¤Ï¥Þ¥¯¥í¤È¤·¤ÆºÆÄêµÁ¤·¤Þ¤¹¡£ ¤Ä¤Þ¤ê¡¢·ë¹çÄêµÁ¤ÎÀèÆ¬¤Ëmacro¤òÄɲä·¤Þ¤¹¡£

¸µ´Ø¿ô¤ä¥¢¥É¥Ð¥¤¥¹ÃÇÊҤΤɤ줫¤ËÂÐÏÃÀë¸À¤¬¤¢¤ì¤Ð¡¢ ÂÐÏÃÀë¸À¥Õ¥©¡¼¥à¤¬Æþ¤ê¤Þ¤¹¡£ ÂÐÏÃŪ¤Ê´ðËÜ´Ø¿ô¤ò¥¢¥É¥Ð¥¤¥¹¤·¤¿¾ì¹ç¤Ë¤Ï¡¢ ÆÃÊ̤ÊÊýË¡¤ò»È¤¤¤Þ¤¹¡£ ¤Ä¤Þ¤ê¡¢´ðËÜ´Ø¿ô¤òcall-interactively¤Ç¸Æ¤Ó½Ð¤·¤Æ¡¢ ´ðËÜ´Ø¿ô¼«¿È¤¬°ú¿ô¤òÆÉ¤ß¼è¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£ ¤³¤Î¾ì¹ç¡¢¥¢¥É¥Ð¥¤¥¹¤«¤é¤Ï°ú¿ô¤ò»²¾È¤Ç¤­¤Þ¤»¤ó¡£

³Æ¥¯¥é¥¹¤Î¤µ¤Þ¤¶¤Þ¤Ê¥¢¥É¥Ð¥¤¥¹¤ÎËÜÂÎ¥Õ¥©¡¼¥à¤Ï¡¢ ¤½¤ì¤é¤Î»ØÄꤵ¤ì¤¿½ç¤ËÁȤßΩ¤Æ¤é¤ì¤Þ¤¹¡£ Êñ°Ï¥¢¥É¥Ð¥¤¥¹l¡Êaround-advice l¡Ë¤Î¥Õ¥©¡¼¥à·²¤Ï¡¢ Êñ°Ï¥¢¥É¥Ð¥¤¥¹l - 1¡Êaround-advice l - 1¡Ë¤Î ¥Õ¥©¡¼¥à¤Î1¤Ä¤ËÆþ¤ê¤Þ¤¹¡£

Êñ°Ï¥¢¥É¥Ð¥¤¥¹¤Î¤â¤Ã¤È¤âÆâ¦¤Ç¤Ï¡¢

¸µÄêµÁ¤òarglist¤ËŬÍÑ

¤·¤Þ¤¹¤¬¡¢¤½¤Î¥Õ¥©¡¼¥à¤Ï¸µ´Ø¿ô¤Î¼ïÎà¤Ë°Í¸¤·¤Þ¤¹¡£ ÊÑ¿ôad-return-value¤Ë¤Ï¡¢¤½¤ÎÌá¤êÃͤ¬ÀßÄꤵ¤ì¤Þ¤¹¡£ ¤³¤ÎÊÑ¿ô¤Ï¤¹¤Ù¤Æ¤Î¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤«¤é¸«¤¨¤ë¤Î¤Ç¡¢ ¥¢¥É¥Ð¥¤¥¹¤·¤¿´Ø¿ô¤«¤é¼ÂºÝ¤ËÌá¤ë¤Þ¤¨¤Ë¡¢ ¤³¤ì¤ò»²¾È¤·¤¿¤êÊѹ¹¤Ç¤­¤Þ¤¹¡£

Êݸ¤¿¥¢¥É¥Ð¥¤¥¹ÃÇÊÒ¤ò´Þ¤à¥¢¥É¥Ð¥¤¥¹¤·¤¿´Ø¿ô¤Î¹½Â¤¤âƱ¤¸¤Ç¤¹¡£ Í£°ì¤Î°ã¤¤¤Ï¡¢¥Õ¥©¡¼¥àunwind-protect¤Ë¤è¤ê¡¢ ¥¢¥É¥Ð¥¤¥¹ÃÇÊҤǥ¨¥é¡¼¤òµ¯¤³¤·¤¿¤êÈó¥í¡¼¥«¥ëæ½Ð¤ò¹Ô¤Ã¤Æ¤â¡¢ Êݸ¤¿¥¢¥É¥Ð¥¤¥¹¤¬¼Â¹Ô¤µ¤ì¤ë¤³¤È¤òÊݾڤ·¤Þ¤¹¡£ Êñ°Ï¥¢¥É¥Ð¥¤¥¹¤ò1¤Ä¤Ç¤âÊݸ¤Æ¤¤¤ë¤È¡¢¤½¤Î·ë²Ì¤È¤·¤Æ¡¢ Êñ°Ï¥¢¥É¥Ð¥¤¥¹Á´ÂΤ¬Êݸ¤ì¤Þ¤¹¡£