Previous: Errors, Up: Nonlocal Exits [Contents][Index]
unwind-protect
¹½Â¤¤Ï¡¢¥Ç¡¼¥¿¹½Â¤¤ò°ì»þŪ¤ËÀ°¹çÀ¤Î¤Ê¤¤¾õÂÖ¤Ë
¤¹¤ë¤È¤¤Ë¤ÏËܼÁŪ¤Ç¤¹¡£
¤³¤Î¹½Â¤¤Ë¤è¤ê¡¢¥¨¥é¡¼¤äÈó¥í¡¼¥«¥ëæ½Ð¤¬µ¯¤³¤Ã¤¿¤È¤¤Ë¡¢
¥Ç¡¼¥¿¤ÎÀ°¹çÀ¤ò²óÉü¤Ç¤¤Þ¤¹¡£
unwind-protect
¤Ï¡¢body¤«¤é¤É¤Î¤è¤¦¤ËÀ©¸æ¤¬Î¥¤ì¤¿¾ì¹ç¤Ë¤â
cleanup-forms¤Î¼Â¹Ô¤òÊݾڤ·¤Æ¡¢body¤ò¼Â¹Ô¤¹¤ë¡£
body¤ÏÄ̾ï¤É¤ª¤ê´°Î»¤¹¤ë¤«¡¢
throw
¤ò¼Â¹Ô¤·¤Æunwind-protect
¤«¤éæ½Ð¤¹¤ë¤«¡¢
¥¨¥é¡¼¤ò°ú¤µ¯¤³¤¹¡£
¤¤¤º¤ì¤Î¾ì¹ç¤Ç¤â¡¢cleanup-forms¤Ïɾ²Á¤µ¤ì¤ë¡£
¥Õ¥©¡¼¥àbody¤¬Àµ¾ï¤Ë½ªÎ»¤¹¤ë¤È¡¢
unwind-protect
¤Ï¡¢cleanup-forms¤òɾ²Á¤·¤¿¤¢¤È¤Ë¡¢
¥Õ¥©¡¼¥àbody¤ÎºÇ¸å¤ÎÃͤòÊÖ¤¹¡£
¥Õ¥©¡¼¥àbody¤¬´°Î»¤·¤Ê¤«¤Ã¤¿¾ì¹ç¡¢
unwind-protect
¤ÏÉáÄ̤ΰÕÌ£¤Ç¤ÎÃͤÏÊÖ¤µ¤Ê¤¤¡£
unwind-protect
¤¬Êݸ¤ë¤Î¤Ïbody¤À¤±¤Ç¤¢¤ë¡£
cleanup-forms¤½¤Î¤â¤Î¤Î¤É¤ì¤«¤¬¡Êthrow
¤ä¥¨¥é¡¼¤Ç¡Ë
Èó¥í¡¼¥«¥ëæ½Ð¤ò¹Ô¤¦¤È¡¢unwind-protect
¤Ï¡¢
cleanup-forms¤Î»Ä¤ê¤òɾ²Á¤¹¤ë¤³¤È¤òÊݾڤ·¤Ê¤¤¡£
cleanup-forms¤Î¤É¤ì¤«¤¬¼ºÇÔ¤¹¤ë¤È¥È¥é¥Ö¥ë¤Ë¤Ê¤ë´í¸±À¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢
cleanup-forms¤òÊ̤Îunwind-protect
¤ÇÊݸ¤ë¡£
¥Õ¥©¡¼¥àunwind-protect
¤Î¸½ºß¤ÎÆþ¤ì»Ò¤Î¸Ä¿ô¤Ï¡¢
¥í¡¼¥«¥ëÊÑ¿ô«Çû¤Î¸Ä¿ô¤È¤È¤â¤Ë¿ô¤¨¤é¤ì¡¢
max-specpdl-size
¤ËÀ©¸Â¤µ¤ì¤Æ¤¤¤ë¡Êsee Local Variables¡Ë¡£
¤¿¤È¤¨¤Ð¡¢É½¼¨¤·¤Ê¤¤¥Ð¥Ã¥Õ¥¡¤ò°ì»þŪ¤ËºîÀ®¤·¡¢ ½ªÎ»Á°¤Ë³Î¼Â¤Ë¤½¤ì¤ò¾Ãµî¤·¤¿¤¤¤È¤·¤Þ¤·¤ç¤¦¡£
(save-excursion (let ((buffer (get-buffer-create " *temp*"))) (set-buffer buffer) (unwind-protect body (kill-buffer buffer))))
ÊÑ¿ôbuffer
¤ò»È¤ï¤º¤Ë(kill-buffer (current-buffer))
¤È
½ñ¤¯¤À¤±¤Ç½½Ê¬¤À¤È¹Í¤¨¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
¤·¤«¤·¡¢Ê̤ΥХåե¡¤ËÀÚ¤êÂØ¤¨¤¿¤¢¤È¤Çbody¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ë¤Ï¡¢
¾å¤ÎÊýË¡¤Ï¤è¤ê°ÂÁ´¤Ç¤¹¡£
¡Ê¤¢¤ë¤¤¤Ï¡¢body¤Î¼þ¤ê¤ËÊ̤Îsave-excursion
¤ò½ñ¤¤¤Æ¡¢
°ì»þ¥Ð¥Ã¥Õ¥¡¤ò¾Ãµî¤¹¤ë¤È¤¤Ë¡¢¤½¤ì¤¬¥«¥ì¥ó¥È¥Ð¥Ã¥Õ¥¡¤Ë¤Ê¤ë¤³¤È¤ò
Êݾڤ¹¤ë¡£¡Ë
Emacs¤Ë¤Ï¡¢¾å¤Î¤è¤¦¤Ê¥³¡¼¥É¤ËŸ³«¤µ¤ì¤ëwith-temp-buffer
¤È¤¤¤¦
ɸ½à¥Þ¥¯¥í¤¬¤¢¤ê¤Þ¤¹¡Êsee Current Buffer¡Ë¡£
Ëܽñ¤ÇÄêµÁ¤·¤Æ¤¤¤ë¥Þ¥¯¥í¤Î¤¤¤¯¤Ä¤«¤Ç¤Ï¡¢
¤³¤Î¤è¤¦¤Ëunwind-protect
¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£
¥Õ¥¡¥¤¥ëftp.el¤«¤é»ý¤Ã¤Æ¤¤¿¼ÂºÝ¤ÎÎã¤ò¼¨¤·¤Þ¤·¤ç¤¦¡£
¥ê¥â¡¼¥È¤Î·×»»µ¡¤Ø¤ÎÀܳ¤ò³ÎΩ¤¹¤ë¥×¥í¥»¥¹¡Êsee Processes¡Ë¤òºî¤ê¤Þ¤¹¡£
´Ø¿ôftp-login
¤Ï¡¢¤½¤Î´Ø¿ô¤ÎºîÀ®¼Ô¤¬Í½ÁۤǤ¤Ê¤¤¤Û¤É¤Î
¿ô¿¤¯¤ÎÌäÂê¤ËÂФ·¤Æ¤È¤Æ¤âÉÒ´¶¤Ç¤¹¤«¤é¡¢
¼ºÇÔ¤·¤¿¤È¤¤Ë¥×¥í¥»¥¹¤ò¾Ãµî¤¹¤ë¤³¤È¤òÊݾڤ¹¤ë¥Õ¥©¡¼¥à¤ÇÊݸ¤Þ¤¹¡£
¤µ¤â¤Ê¤¤¤È¡¢Emacs¤Ï¡¢ÌµÍѤʥµ¥Ö¥×¥í¥»¥¹¤ÇËþ¤¿¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
(let ((win nil)) (unwind-protect (progn (setq process (ftp-setup-buffer host file)) (if (setq win (ftp-login process host user password)) (message "Logged in") (error "Ftp login failed"))) (or win (and process (delete-process process)))))
¤³¤ÎÎã¤Ë¤Ï¡¢¾®¤µ¤Ê¥Ð¥°¤¬1¤Ä¤¢¤ê¤Þ¤¹¡£
¥æ¡¼¥¶¡¼¤¬C-g¤òÂǤäÆÃæÃǤ·¤è¤¦¤È¤·¤Æ¡¢¤«¤Ä¡¢
´Ø¿ôftp-setup-buffer
¤Î½ªÎ»¸å¤Ë
ÊÑ¿ôprocess
¤òÀßÄꤹ¤ë¤Þ¤¨¤Ë¼ÂºÝ¤ËÃæÃǤ¬¹Ô¤ï¤ì¤ë¤È¡¢
¥×¥í¥»¥¹¤Ï¾Ãµî¤µ¤ì¤Þ¤»¤ó¡£
¤³¤Î¥Ð¥°¤òľ¤¹´Êñ¤ÊÊýË¡¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢
¾¯¤Ê¤¯¤È¤â¡¢¤Û¤È¤ó¤Éµ¯¤³¤ê¤¨¤Þ¤»¤ó¡£