closures 相关问题

闭包是一个第一类函数,它引用(关闭)变量来自定义它的作用域。如果闭包在其定义范围结束后仍然存在,则它关闭的变量也将继续存在。

使用预定义对象减少 Task.Run/Factory.StartNew 中的闭包开销

这纯粹是为了实验目的和/或学习练习。本质上,我想看看是否可以减少使用 Task.Run(()=>Func<>()) 时创建的闭包的占用空间

回答 2 投票 0

闭包中的局部变量可见性与局部`sub`s

Perl 5.18.2 似乎接受“本地子例程”。 例子: 子外层() { 我的 $x = 'x'; # 只是举一个简单的例子 子内层($) { 打印“${x}$_[0] “;...

回答 3 投票 0

使用 IntelliJ IDEA 在 Groovy 中调试迭代(闭包)

我有一个混合 Java 和 Groovy 代码的代码库。对于 Groovy 代码中的迭代,我们倾向于使用闭包: String[] 字符串 = [“第一”、“第二”、“第三”] strings.each { 字符串 -> 打印

回答 2 投票 0

在 Rust 中,为什么 FnOnce 可以改变值?

我一直将 FnOnce 视为一个可以在其范围内消耗值的函数,但不能变异,那就是 FnMut,你需要一个 mut 闭包来完成类似的事情。 然而,这个例子似乎...

回答 1 投票 0

Rust 闭包默认是堆栈分配还是堆分配?

我知道 Rust 默认情况下在堆栈上分配,但论文 Ownership is Theft 说 Rust 闭包通常是动态分配的(我认为这意味着“在堆上”)。

回答 1 投票 0

理解 JavaScript 中的函数作用域和闭包

我对 JavaScript 比较陌生,并且很难掌握函数作用域和闭包的概念。我一直在尝试函数并遇到一些意外的行为。这是一个简单的...

回答 1 投票 0

如何为观察者设计模型保持(自捕获)闭包

我试图将多个回调作为闭包保存,但我在它们的生命周期中遇到了麻烦: pub 类型 WriteCallback = Box u8>; pub 结构地址总线 {

回答 1 投票 0

如何在 Swift 中转换闭包签名内的参数类型?

我正在尝试用 Swift(目前是 Swift 2)编写一个轻观察者类。这个想法是在实体组件系统中使用它,作为组件之间相互通信的一种手段,而无需

回答 4 投票 0

如何在 Free Pascal 中使用匿名方法?

我尝试使用Delphi的匿名方法语法: 类型 fun = 对 function() 的引用:整数; Fpc 显示语法错误: 错误:找不到标识符“参考” 什么是自由帕斯卡

回答 2 投票 0

Rust 中线程闭包的静态生命周期

使用std::thread; fn 主() { // 静态数字:[i32;3] = [1,2,3]; 让数字 = vec![1,2,3]; 线程::范围(|s| { s.spawn(移动||{ 对于 n in &numbers { ...

回答 1 投票 0

PHP:将匿名函数作为参数传递

是否可以传递一个匿名函数作为参数,并让它立即执行,从而传递函数的返回值? 函数 myFunction(数组 $data){ print_r($数据); }

回答 3 投票 0

在 rust 和 Option 中返回函数的函数

我目前正在学习 Rust,我无法理解为什么我的代码失败以及如何修复它。 我想创建一个返回另一个函数的函数。第二个函数的行为应该

回答 2 投票 0

在 PHP 的类属性中存储闭包函数

好的我有下面的代码 栏(); } } $mee = 新的 foo(); //保存一个闭包

回答 7 投票 0

捕获 FnMut 闭包的寿命不够长

问题 简而言之:我正在尝试实现一个包含闭包回调的结构,该闭包可变地捕获状态。想法是用户提供回调(关闭),并且可以稍后通知...

回答 1 投票 0

为什么我的国际象棋桌在填充之前没有重置?

我正在制作一个国际象棋游戏,我从一个初始棋盘开始。我有一个基于 FEN 的位置更改功能。但是当我想在添加新方块之前更新棋盘并重置时,它不会...

回答 1 投票 0

从 Promise 返回响应后获取本地状态变量的陈旧值

我有一个带有两个按钮的反应应用程序,单击后会从服务器加载用户名。如果我一次单击一个按钮并等待响应,则该行为有效,但是,如果我同时单击两个按钮,则结果...

回答 1 投票 0

@State 中保存的多个闭包导致内存泄漏,并保留对 @StateObject 的引用

我在代码中遇到了非常奇怪的内存泄漏。这主要是由于使用@escaping闭包并嵌套该闭包引起的。我创建了最小的可重现示例来演示此内存泄漏。

回答 1 投票 0

使用 Groovy 映射进行 DSL 参数

按照此处的链接,我们有自己的 DSL 扩展,它在文件 vars/buildFlow.groovy 中定义如下: 地图mapFromClosure(闭包体){ 地图 按照此处的链接,我们有自己的 DSL 扩展,它在文件中的定义如下 vars/buildFlow.groovy: Map<String, Object> mapFromClosure(Closure body) { Map<String, Object> config = [:] body.resolveStrategy = Closure.DELEGATE_FIRST body.delegate = config body() // other things } 在我的Jenkinsfile中,我可以这样使用它: buildFlow { // different args } 我希望能够动态地将参数填充到 buildFlow,但我不确定如何使用 Groovy 和闭包。根据我的条件,我想要的一切都有Map,但我不能像这样将Map传递给buildFlow。有没有办法将 Map 参数转换为闭包构造函数? Map flowArgs = [ argA: 1, argB: 2 ] buildFlow { flowArgs } 我见过谈论使用 ConfigObject 的解决方案,但这受到限制: Scripts not permitted to use new groovy.util.ConfigObject 要使用 buildFlow 动态填充 Map 的参数,您可以考虑将 Map 转换为 Groovy 中的 closure。 这可以通过迭代 Map 并将每个键值对作为属性应用到闭包来完成。 首先,修改mapFromClosure中的vars/buildFlow.groovy方法来处理Closure和Map类型: Map<String, Object> mapFromClosure(Object body) { Map<String, Object> config = [:] if (body instanceof Closure) { body.resolveStrategy = Closure.DELEGATE_FIRST body.delegate = config body() } else if (body instanceof Map) { config.putAll(body) } // other things return config } 然后,创建一个实用方法将 Map 转换为 Closure(如“Groovy 在 Map 和 Closure 之间转换”): Closure mapToClosure(Map map) { return { map.each { key, value -> delegate."$key" = value } } } 在 Jenkinsfile 中使用此实用方法将 Map 转换为闭包,然后再将其传递给 buildFlow: Map flowArgs = [ argA: 1, argB: 2 ] buildFlow mapToClosure(flowArgs) 结果: Jenkinsfile | └── buildFlow (Accepts Closure or Map) | └── mapFromClosure (Handles both Closure and Map) | └── mapToClosure (Converts Map to Closure) 这将提供处理 DSL 中的闭包和映射的灵活性,允许动态参数传递到 buildFlow。 mapToClosure 函数在 Jenkins 管道中用于将参数 Map 转换为 Closure,然后再将其传递给 buildFlow。这确保管道脚本保持在 Jenkins 脚本安全性允许的范围内。

回答 1 投票 0

JavaScript for 循环是否会在每次迭代中重新声明变量?

我试图理解 JavaScript 中的闭包,并遇到了这个例子: 对于(令 i = 0;i < 3; i++) { const log = () => { 控制台.log(i); }; setTimeout(日志, 100); }

回答 2 投票 0

我认为 C# 具有词法作用域,但为什么这个示例显示动态作用域行为?

var x = 1; Func f = y => x + y; x = 2; Console.WriteLine(f(1)); 输出是 3。根据 https://web.archive.org/web/20170426121932/http:...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.