Emanuel Berg <in...@dataswamp.org> writes:

> Just try - and you will fly ...
> 
> ;;; -*- lexical-binding: t -*-
> 
> (defun c ()
>   (message b) )
> 
> (defun a (b)
>   (message b)
>   (setq b "ah")
>   (c) )
> 
> ;; (a "oh")
> ;;         ^ eval me

Error message is displayed on *Backtrace* buffer.

Debugger entered--Lisp error: (void-variable b)
  (message b)
  c()
  a("oh")
  (progn (a "oh"))
  eval((progn (a "oh")) t)
  elisp--eval-last-sexp(nil)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)

And "ah" is displayed on mini buffer in case without
";;; -*- lexical-binding: t -*-".
 
> Also, byte-compiling this will echo a warning saying b is
> a free variable, and this even under dynamic/special scope
> where the code actually works tho (i.e. this particular use of
> 'a' and 'c' where 'a' is used first).

My understanding is 50%.  Do you mean that using setq without
";;; -*- lexical-binding: t -*-" has no problem?

-- 
Satoshi Yoshida

Reply via email to