คำถามติดแท็ก dynamic-scoping

3
เหตุใดการกำหนดขอบเขตของ defvar จึงแตกต่างกันโดยไม่มีค่าเริ่มต้น
สมมติว่าฉันมีชื่อไฟล์elisp-defvar-test.elที่มี: ;;; elisp-defvar-test.el --- -*- lexical-binding: t -*- (defvar my-dynamic-var) (defun f1 (x) "Should return X." (let ((my-dynamic-var x)) (f2))) (defun f2 () "Returns the current value of `my-dynamic-var'." my-dynamic-var) (provide 'elisp-dynamic-test) ;;; elisp-defvar-test.el ends here ฉันโหลดไฟล์นี้แล้วไปที่บัฟเฟอร์รอยขีดข่วนและเรียกใช้: (setq lexical-binding t) (f1 5) (let ((my-dynamic-var 5)) (f2)) (f1 5)ส่งคืน 5 ตามที่คาดไว้ซึ่งแสดงว่าเนื้อความของf1ถือmy-dynamic-varเป็นตัวแปรที่กำหนดขอบเขตแบบไดนามิกตามที่คาดไว้ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.