无法在有关 iron lib 的 fn 项目中捕获动态环境

2024-01-07

我使用c/c++驱动的cassandra来查询,然后返回数据。 因此,cass(LinkedList)和cass_it(Vec)都可以显示查询的结果。 但是,我想使用json格式将结果显示到web上,所以我选择使用vec重新组装数据。然而,有一个问题:

error[E0434]: can't capture dynamic environment in a fn item
   --> src/main.rs:306:42
    |
306 |         let out = serde_json::to_string(&cass_it).unwrap();
    |                                          ^^^^^^^
    |
    = help: use the `|| { ... }` closure form instead

怎么了?格式问题?

Code:

fn main() {
    let mut cass = unsafe { cass_connect() };
    let mut cass_it = Vec::new();

    for cc in cass.iter() {
        cass_it.push(cc);
    }

    println!("{:?}", cass_it);

    let mut router = Router::new();
    let localhost = "localhost:3009".to_string();

    fn handler(req: &mut Request) -> IronResult<Response> {
        // convert the response struct to JSON
        let out = serde_json::to_string(&cass_it).unwrap();

        let content_type = "application/json".parse::<Mime>().unwrap();

        Ok(Response::with((content_type, status::Ok, out)))
    }

    router.get("/", handler, "index");

    info!("Listening on {}", localhost);
    Iron::new(router).http(localhost).unwrap();
}

完整代码 https://gitlab.dc.zyxel.com.tw/ZT02777/cassandra-rs-driver


错误说明了一切:

can't capture dynamic environment in a fn item

The fn有问题的项目是handler。即使您已在另一个方法中定义了此函数,但使用以下声明的函数fn (a fnitem) 的编译就像模块顶层的任何其他函数一样。函数无法从其环境中捕获自由变量;他们只能访问其显式参数和静态变量。

该错误继续指出到底是哪个变量有问题:

306 |   let out = serde_json::to_string(&cass_it).unwrap();
    |                                    ^^^^^^^

变量cass_it是在封闭函数中定义的,无法从handler.

错误消息末尾的注释会为您提供如何解决问题的建议:

= help: use the `|| { ... }` closure form instead

一个封闭can从其环境中捕获变量。所以你可以尝试更换fn用一个闭包代替:

let handler = move |req: &mut Request| {
    // convert the response struct to JSON
    let out = serde_json::to_string(&cass_it).unwrap();
    let content_type = "application/json".parse::<Mime>().unwrap();
    Ok(Response::with((content_type, status::Ok, out)))
};

The move关键字将导致闭包取得所有权cass_it而不是尝试引用外部函数中的变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在有关 iron lib 的 fn 项目中捕获动态环境 的相关文章

随机推荐

  • 在 ActionBarSherlock 上显示自定义按钮以显示滑动菜单

    我正在开发一个 Android 应用程序 使用动作栏夏洛克 http actionbarsherlock com with 滑动菜单 https github com jfeinstein10 SlidingMenu 现在 这就是我显示打开
  • numpy 中两个浮点数之间以对数间隔的数字

    我正在尝试使用 python 获取两个浮点数之间对数间隔的 1000 个数字 例如 0 674 到 100 0 之间 这样做的目的是获得更多接近 0 674 的数字 而不仅仅是接近 100 的几个大数字 我尝试使用 numpy logspa
  • Python3'无法导入名称'cached_property'

    我无法让它发挥作用 我不断添加模块 但每次都找不到新模块 为什么这段代码在Python3 6中不起作用 Code from robobrowser import robobrowser from bs4 import BeautifulSo
  • 区分 Javascript 中的触摸和交换事件

    我有一个用于交换图像的图片库 在画廊中 我使用了 touchstart touchmove touchend 和 touchcancel 事件 但现在我还需要处理触摸事件 那么 我应该在移动设备上分别区分触摸和交换事件吗 我正在使用这个技巧
  • python `str()` 函数是否调用类的 `__str__()` 函数?

    如果我定义一个有自己的类 str 函数 是str a 相当于a str where a是我班级的一个实例吗 我检查了蟒蛇文档 https docs python org 2 library functions html str 它没有明确说
  • 在 Groovy 中使用字符串访问地图的地图元素

    鉴于我有一张这样的地图 def myMap b c X 还有一根绳子 def key b c 我想查看使用密钥获取值 X 的选项 我自己想出了两种方法来实现这一目标 但我对这些解决方案不太满意 1 Eval me theMap myMap
  • 加密:在javascript和python中模拟SSL

    由于中国防火墙阻止了 google appengine 的 https 端口 所以我想通过javascript和python模拟一个安全套接字层来保护我的用户信息不会被那些ISP和GFW捕获 我的计划 握手 浏览器请求服务器 服务器生成加密
  • jaxb 当 xsi:nil=true 如果任何子元素存在它仍然显示

    我有以下 xml 输出 当父元素具有属性 xsi nil true 即使子元素为 nillable true 时 我们如何隐藏子元素 endDate XML输出
  • REST API 中错误 HTTP 方法的返回代码?

    我们的API用户可以获得root发送文件 收集清单 GET请求根 API 地址 如果他发送POST 我们应该返回一些东西 同样的问题也适用于其他资源路径 例如发送PATCH在查询路径等上 并非所有方法在某些路径上都有意义 正如我从 HTTP
  • 使用插值在模板中渲染 html 字符串?

    使用角度 4 3 0 假设我有一个像这样的字符串 它是组件的属性 p test 2 bla bla p p test1234 56 p p test test p 所以 我按照文档进行操作 https angular io guide te
  • 有没有办法知道哪个编译器生成了静态库?

    第三方为我提供了一个静态库 a 用于在 Solaris 站上链接 我尝试使用 sunpro 进行编译 但在链接步骤失败 我想这个问题来自我使用的编译器 而不是 gcc 或者只是它的版本 因为编译器提供的 std lib 可能会从库预期的版本
  • opencv多通道元素访问

    我正在尝试学习如何使用 OpenCV 的新 C 界面 如何访问多通道矩阵的元素 例如 Mat myMat size 3 3 CV 32FC2 for int i 0 i lt 3 i for int j 0 j lt 3 j myMat a
  • 如何计算两个日期之间的年龄/年数[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 T SQL 中用年 月 日计算年龄 https stackoverflow com questions 57599 how to calculate age in t sql with yea
  • 如何在传单地图上添加搜索框

    我想使用传单地图作为页面的背景 并且这个页面有搜索功能 但是这个搜索框并不是用来搜索这张地图的 所以我的问题是如何在传单地图上添加搜索框 您还有其他解决方案使用地图作为背景吗 喜欢这个页面 http directory spatineo c
  • 使用 doLast 的 Gradle 执行任务失败

    仅当文件自上次构建以来已更新时 我才尝试运行执行任务 我最初的尝试是这样的 task generateLocalizedStrings type Exec ext srcFile file localization language fil
  • MVC 查看可为空的日期字段格式

    我试图在视图中显示以下内容 但出现问题 td item CreatedByDt ToString MM dd yyyy td 关于如何处理视图中可为空的日期字段的任何想法 顺便说一句 我正在使用 Razor 我收到以下错误 方法 ToStr
  • 减少 solr 结果输出中类似的顶部结果

    我在 solr 中进行了一次搜索 返回了大约 1500 个文档 这些文档基本上都是产品 例如 我的数据集中有一堆女鞋 我的数据集有各种各样的女鞋 但也有一些非常相似的结果 例如 11 号女式耐克运动鞋 10 号女式耐克运动鞋等 现在 当我搜
  • PDFBOX - 使用 easytable 的所有页面中的页眉

    我正在使用 pdfbox 和 easytablehttps github com vandeseer easytable https github com vandeseer easytable用于创建效果很好的动态页面 但我确实希望在所有
  • Matplotlib 多条动画多行

    我一直在研究如何为飞行路径制作多条线的动画 我读取多个 GPS 文件的对象是时间同步它们 它们相对于时间为每条路径设置动画 我找到了如何在动画函数中使用附加来为一行添加动画 现在我需要添加第二个和第三个 以便导入尽可能多的文件 我知道问题出
  • 无法在有关 iron lib 的 fn 项目中捕获动态环境

    我使用c c 驱动的cassandra来查询 然后返回数据 因此 cass LinkedList 和cass it Vec 都可以显示查询的结果 但是 我想使用json格式将结果显示到web上 所以我选择使用vec重新组装数据 然而 有一个