[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introdu
From: |
Michael Albinus |
Subject: |
bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual |
Date: |
Sun, 19 Nov 2023 09:38:54 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Jim Porter <jporterbugs@gmail.com> writes:
Hi Jim,
> +In some cases, both lexical and dynamic binding behave identically.
> +However, in other cases, they can change the meaning of your program.
> +For example, under lexical binding, if you call a function inside of a
> +@code{let} body, that function's body would be unable to ``see'' (or
> +modify) the value of a local variable from the @code{let} expression:
> +
> +@example
> +;;; -*- lexical-binding: t -*-
> +
> +(setq x 1)
> +
> +(defun getx ()
> + x)
> +
> +(let ((x 2))
> + (getx))
> + @result{} 1
> +@end example
> +
> +@noindent
> +If we use dynamic binding instead, the behavior is different:
> +
> +@example
> +;;; -*- lexical-binding: nil -*-
> +
> +(setq x 1)
> +
> +(defun getx ()
> + x)
> +
> +(let ((x 2))
> + (getx))
> + @result{} 2
> +@end example
> +
> +Now, the result of @samp{(getx)} is @samp{2}! That's because under
> +dynamic binding, when @code{getx} looks for the value of @code{x}, it
> +sees the value we set in our @code{let} expression. In other words,
> +the call to @code{getx} happens during the @emph{time} when our
> +@code{let} expression is active. Under lexical binding, @code{getx}
> +doesn't see the value from our @code{let} expression. That's because
> +it happens in a different @emph{place} than the @code{let} body.
Would it be worth to emphasize, that a declaration of x changes this?
That is, when a variable is declared, both lexical and dynamic binding
behave identically.
@example
;;; -*- lexical-binding: t -*-
(devfar x 1)
(defun getx ()
x)
(let ((x 2))
(getx))
@result{} 2
@end example
Best regards, Michael.
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Eli Zaretskii, 2023/11/04
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Richard Stallman, 2023/11/05
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Richard Stallman, 2023/11/05
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Jim Porter, 2023/11/17
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Richard Stallman, 2023/11/18
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Jim Porter, 2023/11/19
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Jim Porter, 2023/11/19
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual,
Michael Albinus <=
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Jim Porter, 2023/11/19
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Jim Porter, 2023/11/19
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Michael Albinus, 2023/11/20
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Richard Stallman, 2023/11/22
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Jim Porter, 2023/11/23
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Eli Zaretskii, 2023/11/24
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Jim Porter, 2023/11/24
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Eli Zaretskii, 2023/11/24
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Jim Porter, 2023/11/24
- bug#66756: 30.0.50; [PATCH] Improve discussion of 'let' in Elisp Introduction manual, Eli Zaretskii, 2023/11/25