Swift中的词汇作用域

在经历LISP中的词汇作用域概念时; 我想知道Swift是否提供这种支持。 确实如此。 好极了…

我使用了一个简单的函数- 数字的平方根来尝试词法作用域。 我使用牛顿法计算平方根。 以下是第一个版本。

sqRt是一个递归函数。 当先前步骤中的猜测足够好时,代码将终止。 其他猜测得到改善,并再次调用函数。

但是然后,在squareRoot函数范围之外,诸如goodEnoughperfectGuess之类的函数没有任何意义。 幸运的是,在Swift中, 函数是一等公民 。 我们可以像声明变量一样声明函数。 这使我进入了sqRt函数的第二个版本。

诸如validateGuessgoodEnough之类的函数在sqRt的函数参数上运行 。 由于这些函数已经在sqRt函数的范围内, 因此可以认为将参数传递给这些内部函数是多余的。 确实是正确的,这就是用词法作用域解决的 。 封闭功能的参数/变量在这些功能的范围内。

具有LexicalScoping的语言具有以下特征:

1.可以在其他功能中定义功能(和过程等)

2.这些内部函数可以访问封闭范围中定义的局部变量。

3.这些内部功能还可以访问封闭功能的功能参数。

通过利用词法作用域支持, sqRt函数的版本3如下。

嘿,等等! 为什么我们不能进一步利用Swift的支持来简化代码。 SquaregoodEnoughImprovementGuess看起来像变量。 因此,让我们简化一下。

我希望您了解Swift中的词法作用域支持。 让我知道你对此的想法。

如果您喜欢这篇文章,请分享/推荐。

该博客还发布在我的个人网站https://swapnilsankla.me