gpt4 book ai didi

javascript - 如何用 Ruby 编写 IIFE?

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:11 26 4
gpt4 key购买 nike

在 Javascript 中,IIFE(立即调用的函数表达式,尽管可能还有其他缩写词的扩展)可以写成:

(function () {
var foo = 'bar'
console.log('hi!');
})();

其中变量声明 foo 不会污染当前作用域。我如何在 Ruby 文件中执行相同的操作?

我想在受限范围内创建一些临时变量(带闭包),并使文件中稍后的其他代码无法访问它们。

最佳答案

defined?(foo)
# => nil

# This defines a lambda, i.e. a closure with its own variable scope, among other things
# and directly executes it
lambda {
foo = 'bar'
puts foo
}.()

defined?(foo)
# => nil

在这个例子中,我们首先检查变量 foo被定义,它不是。然后,我们创建一个新的 lambda 对象(在 Ruby 中是一种特殊的 Proc 。并直接执行它。

Proc 继承周围作用域的变量,因此所有已经定义的局部变量也可以在 proc 内部访问(和更改)。然而,仅在 proc 中定义的新变量在 proc 之外是不可见的。

这可以用最后的 defined? 来验证声明。

请注意,这种技术不是很像 ruby​​。相反,您应该旨在创建可以调用的实际方法。为了封装数据和行为,您还可以创建小类,即使是一次性使用也可以完全处理您的行为和所有必需的数据。

通常在 Ruby 中,您倾向于不传递匿名闭包(即 javascript 中的匿名函数或 Ruby 中的 procs/lambdas/blocks),而是使用完整对象。如果您经常在代码中使用上述技术,经验丰富的 ruby​​ 开发人员会关注您。

关于javascript - 如何用 Ruby 编写 IIFE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33523714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com