问题标签 [dynamic-scope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 外部函数的局部变量
我正在尝试将外部函数中函数的局部变量作为自由变量访问。
这就是我想要实现的目标:
我收到一个错误,因为该变量i
未在show_r
. 制作i
一个全局变量是可行的,但我需要i
成为一个局部变量。
ruby-on-rails - Ruby on Rails 动态组合范围
我希望能够在运行时动态组合范围,以根据用户输入创建自定义查询。假设我有一个带有 Book 模型的库应用程序,并且定义了以下范围:checked_out, fiction, non_fiction, overdue, and checked_out_by
.
, last scope
,checked_out_by
是一个以 library_user_id 作为参数的 lambda。该应用程序允许图书馆员根据用户输入运行不同类型的查询,动态组合这些范围。因此,如果图书管理员想要创建一份报告,显示所有已签出的非小说类书籍,则可以轻松执行以下操作:
但是如何使用设置为 lambda 的范围来执行此操作?例如,如果用户想要创建一个查询,显示某个特定人已过期和已签出的书籍?在这种情况下,我希望条件数组包含“过期”和“checked_out_by”范围,但我不知道如何使用 lambda 范围进行设置。我试过:
但这给了我一个错误,说“ {:checked_out_by => 6} is not a symbol
”。我也试过
和其他一些变体,但它们都不起作用。有谁知道如何做到这一点?
lisp - Emacs lisp:为什么这个 sexp 会导致无效函数错误?
有问题的性别是
对我来说,它看起来应该评估为8
,并且在其他lisp(例如Racket)中它确实如此,但是在elisp中它会抛出这个错误:
它似乎在告诉我
不是一个有效的函数。这似乎是错误的,因为当我评估该表达式时,我得到
这对我来说看起来像是一个有效的功能。有谁知道为什么会这样?它与动态范围有关吗?
emacs - strange interaction between lexical-binding and defvar in emacs lisp
The following emacs lisp file is about seeing what happens when Alice uses a lexically bound local variable foo
in her init file and Bob defines foo
as a global special variable with defvar
in his init file and Alice borrows part of Bob's init file code into her own init file not knowing that foo
is going to turn special.
Output:
Results R1 and R2 are just as what I expect. Result R4 is consistent with defvar documentation, although it may surprise Alice unless she reads Bob's code.
I find R3 surprising. Why is R3 like that?
Speaking of R4, what can Alice do to protect her
foo
from turning special by others? For example,foo
may be a lexical local variable she uses in her init file or one of her emacs package, and(defvar foo "something")
may be in some of the packages she happens to use, orfoo
could be one of the new special variable names introduced by a future version of Emacs. Is there something Alice can put in her file that says to Emacs "In this file, foo should be always lexical, even if some code from outside happens to use a special variable of the same name"?
c# - C# 检查表达式的动态“作用域”
是否有可能(在 C# 中)使checked(...)
表达式具有用于溢出检查的动态“范围”?换句话说,在以下示例中:
因为在表达式checked(add(max, 1))
中,函数调用OverflowException
会导致溢出,即使在表达式的动态范围内发生溢出,也会抛出no checked(...)
。
有没有办法让两种方式都评估int.MaxValue + 1
抛出一个OverflowException
?
编辑:好吧,要么告诉我是否有办法,要么给我一个更好的方法来做到这一点(请)。
我认为我需要这个的原因是因为我有如下代码:
我希望打印int: ...
它是否a + b
在int
范围内,并且long: ...
如果小整数加法溢出。有没有比简单地改变每一个Action
(我有很多)更好的方法?
emacs - 处理过去的 Emacs Lisp 动态范围陷阱
在过去,Emacs 不支持词法作用域。我想知道当时人们如何处理动态范围的特定陷阱。
假设 Alice 编写了一个my-insert-stuff
依赖于其中fp-repeat
定义的函数的命令fp.el
(我们假设这是一个为 Bob 编写的函数式编程提供大量函数的库),并且假设fp-repeat
是为了多次重复调用一个函数。
init.el
来自爱丽丝的部分内容:
Bob的部分内容fp.el
:
爱丽丝很快发现她的命令并没有像她预期的那样工作。那是因为 Alice 的使用i
和 Bob 的使用发生了i
冲突。在过去,Alice 或/和 Bob 可以做些什么来防止这种碰撞的发生?
也许 Bob 可以将文档字符串更改为
perl - 如何用具有动态作用域的语言设计函数?
我最近开始在 Logo 中编写非平凡的程序(在没有海龟图形的意义上非平凡)。我遇到的主要障碍之一是动态范围界定。例如考虑以下程序:
该permute
函数适用于[]
它产生输出的空列表和它产生输出[[]]
的带有单个项目[a
] 的列表[[a]]
。但是,对于具有两个或更多元素的列表,它会失败。
猜猜为什么会失败?传递给foldl
from的 lambda 函数permute
访问了自由变量list
,并且因为foldl
还有一个名为它的局部变量list
,所以它访问了错误的变量。因为foldl
是递归定义的,所以list
变量会随着每次迭代而不断缩小。
我通过在函数中保存原始列表的副本解决了这个问题,foldl
如下所示:
然而,我花了晚上的大部分时间才弄清楚是什么导致了这个奇怪的错误。我以前从未使用具有动态范围的语言进行编程(保存一小段 bash 脚本)。
因此我的问题如下:用具有动态作用域的语言编写函数时应该记住什么?最佳实践是什么?如何避免常见的陷阱?
scope - 词法作用域与动态作用域
所以我有这个问题,我必须使用两个不同的范围规则来计算输出。我知道使用词法作用域的输出是a=3
and b=1
,但是我很难用动态作用域来计算输出。
注意:下面的代码示例使用 C 语法,但我们将其视为伪代码。
这是我想出的。a
使用动态范围,对和的非本地引用b
可以更改。所以我有a=2
(从 p() 返回),然后是b=4
(在 q() 内)。所以输出是2 4
?
closures - 如何在 Emacs lisp 动态范围内不使用闭包
我知道 Emacs 24 引入了词法作用域;这很好,但我一直在使用词汇范围,我试图从不同的角度看待动态范围。
最初我只是做了我一直做的事情,依靠闭包:
在最终理解为什么在 lambda 运行时 p 未定义之后,我想出了这个来强制在 dolist 的上下文中而不是在 lambda 运行时对 p 进行评估。
这是在没有闭包和词法作用域的情况下解决问题的经典解决方案吗?