如何修复:预期具体生命周期,但发现绑定生命周期参数

2024-03-10

我目前正在听这个问题。我试图将其缩小到最小的可重现示例。

struct Request;

struct ResponseWriter<'a> { 
    dummy: &'a () 
}

#[deriving(Clone)]
pub struct RouteStore{
    pub routes: Vec<Route>,
}

#[deriving(Clone)]
struct Route {
    path: String,
    handler: fn(request: &Request, response: &mut ResponseWriter)
}

impl RouteStore {
    pub fn new () -> RouteStore {
        RouteStore {
            routes: Vec::new()
        }
    }

    fn add_route (&mut self, path: String, handler: fn(request: &Request, response: &mut ResponseWriter)) -> () {
        let route = Route {
            path: path,
            handler: handler
        };
        self.routes.push(route);
    }
}

fn main () {

}

这给我留下了:

error: mismatched types: expected `fn(&http::server::request::Request, &mut http::server::response::ResponseWriter<>)` but found `fn(&http::server::request::Request, &mut http::server::response::ResponseWriter<>)` (expected concrete lifetime, but found bound lifetime parameter )
src/so.rs:12     handler: fn(request: &Request, response: &mut ResponseWriter)
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

之前我存储了我的fn in a HashMap像这样HashMap<String, fn(request: &Request, response: &mut ResponseWriter)>。这很好用。

但现在我想重构一下并引入一个Route将事物构造并存储为Vec<Route>。但突然间地狱崩溃了,我不知道如何解决它:-/

对于好奇的人来说,这是我为 Rust 编写一个受expressjs启发的Web框架的一部分Floor https://github.com/cburgdorf/Floor


在使你的示例变得更加简单之后(摆脱http依赖),以及 IRC 上的一些建议(即有人指出,如果删除deriving(Clone)来自Route),您可以在下面看到一个固定版本(--cfg v2)

#[deriving(Clone)]
pub struct RouteStore{
    pub routes: Vec<Route>,
}

#[cfg(v1)]
#[deriving(Clone)]
struct Route {
    path: String,
    handler: fn(response: &mut ())
}

#[cfg(v2)]
struct Route {
    path: String,
    handler: fn(response: &mut ())
}

#[cfg(v2)]
impl Clone for Route {
    fn clone(&self) -> Route {
        Route { path: self.path.clone(), handler: self.handler }
    }
}
impl RouteStore {
    pub fn new () -> RouteStore {
        RouteStore {
            routes: Vec::new()
        }
    }

    fn add_route (&mut self, path: String, handler: fn(response: &mut ())) -> () {
        let route = Route {
            path: path,
            handler: handler
        };
        self.routes.push(route);
    }
}

fn main () {

}

这里的问题是fn不实施Clone.(编辑:嗯,它does have a clone方法,但返回的值似乎与该字段所需的不兼容。这v2上面的版本只是回避了整个问题。)

所以我怀疑您看到的错误来自自动生成的克隆实现deriving(Clone)注入。

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

如何修复:预期具体生命周期,但发现绑定生命周期参数 的相关文章

  • 检查 Option 是否包含特定 Some 值的最佳方法?

    您不能执行以下操作 if option is some option 1 既然如果option is some false第二次比较会出错 做这样的事情的最好方法是什么 我现在正在做什么 if option is some if optio
  • 为 Raspberry Pi 2 交叉编译 rust-openssl

    我在一台 Debian 机器上 我想为我的 Raspberry Pi 2 交叉编译一个项目 我已经设法使用 rustup 为一个简单的 hello world 做到了这一点 但不知道如何交叉编译 rust openssl crate 我已经
  • 如何重载“新”方法?

    我刚刚开始学习 Rust 我想知道是否有方法重载方法 首先 我创建了一个结构并使用 impl 来实现基本的 新 方法 然后我想添加带有一些参数的 新 方法 并且我尝试使用 Trait 来实现这一点 以下代码已成功编译 但是当我尝试将 new
  • 解析 Rust FFI 中的联合结构

    我在解析 c union 结构 XEvent 时遇到问题 我正在 Rust 中试验 Xlib 和 X Record Extension 我生成 ffi 绑定Rust 绑定根 https github com crabtw rust bind
  • 强制 io::stdio 和 BufReader 之间的 BufRead 特征兼容性

    我正在尝试输入双关语io stdio实例和一个BufReader包装一个文件 以便我可以编写假设缓冲输入源的代码 我尝试了几种尝试投射的变体io stdio to a BufRead类型和所有都因以下一种或多种变体而失败 error mis
  • 在编译时检查指针大小

    我发现类似的问题编译时泛型类型大小检查 https stackoverflow com questions 30330519 compile time generic type size check 但没有收到任何答复 问题是通过FFI u
  • 有条件地迭代几个可能的迭代器之一

    我正在尝试根据Option输入到函数 这个想法是根据是否给定的进行迭代Option存在 这是一个最小的 如果愚蠢的话 示例 use std iter fn main let x Option
  • Rust:根目录中没有“模块”

    当我跑步时use crate feed in src cmdline rs我希望导入src feed rs 但事实并非如此 相反我得到 error E0432 unresolved import crate feed gt src cmdl
  • bool 是否保证为 1 个字节?

    The Rust 文档 https doc rust lang org reference html primitive types是模糊的bool s size 它是否保证为 1 个字节 还是像 C 中那样未指定 fn main use
  • 如何使用 serde_json 从 JSON 数组内部流式传输元素?

    我有一个 5GB JSON 文件 它是具有固定结构的对象数组 first John last Doe email email protected cdn cgi l email protection first Anne last Orth
  • 有条件地从 flat_map 返回空迭代器

    鉴于这个定义foo let foo vec vec 1 2 3 vec 4 5 6 vec 7 8 9 我希望能够编写这样的代码 let result Vec lt gt foo iter enumerate flat map i row
  • 如何使用diesel-rs选择色谱柱的子集?

    我现在花了几个小时的时间来查询表的可用列的子集以及在其中包含计算 我知道这不是在选择查询中执行计算的最佳方式 但现在 我只是在开发一个原型 它应该是可行的 我在用diesel rs作为后端实现中所有数据库操作的 ORM 数据将存储在 Pos
  • 检查自定义结构的相等性

    我正在尝试检查两个 功能相同 结构的相等性 derive PartialEq Debug pub struct TypeA lt a gt a str derive PartialEq Debug pub struct TypeB lt a
  • 如何异步读取文件?

    我可以创建一个单独的线程来充当 I O 队列 但我不确定这是否是最好的方法 看起来是最好的 我不知道如何加载本地文件mio https github com carllerche mio 使用 tokio fs read use tokio
  • Rust 元组参考和参考元组

    元组引用和作为类型引用的元组之间有什么关系 为什么第一个有效但第二个不行 let a 1 let b 2 This works c i32 d i32 let c d a b type TupleOfRef lt a gt a i32 a
  • 如何使用同级/相邻 Rust 文件中的结构?

    我正在尝试编辑具有以下结构的 Rust 项目 src iface ip rs src iface tun rs 我想从以下位置调用东西ip rs inside tun rs So on tun rs我补充道 use iface ip 但它说
  • Rust 模式匹配如何确定绑定变量是引用还是值?

    use crate List Cons Nil derive Debug struct Foo derive Debug enum List Cons i32 Foo Nil impl List fn tail self gt Option
  • 返回数组大小的关联常量[重复]

    这个问题在这里已经有答案了 考虑以下trait pub trait Representable const SIZE usize fn get self gt u8 SIZE fn set mut self value u8 SIZE 我想
  • future::select 之间有什么区别!和东京::选择?

    我正在使用 Tokio 我想接收来自两个不同的请求mpsc队列 select 似乎是要走的路 但我不确定两者之间有什么区别futures select and tokio select 在什么情况下应该使用其中一种而不是另一种 tokio
  • 用于解析 Rust 中的匹配臂的递归宏

    我正在尝试编写一个宏来将一组规则扩展为执行标记匹配的代码 但无法在不导致宏扩展错误的情况下生成正确的代码 我知道我可以通过其他方式处理这个问题 但这里的关键问题不是如何解析令牌 而是如何编写一个可以使用匹配臂递归扩展令牌树的宏 这个想法是我

随机推荐

  • TitleView 未覆盖整个工具栏

    我正在开发通知计数Toolbar using TitleView 里面TitleView我用过RelativeLayout这是从顶部裁剪未显示完整计数圆Label 这是我的代码
  • Playstore 展示 Beta 标签床边制作应用

    前几天 我推广了我的测试版 open beta test 应用于生产 一切顺利 我可以在 Playstore 中搜索我的应用程序 但有一个问题 playstore没有删除 beta 我的应用程序名称旁边的标签 我想删除那个标签 我该怎么做或
  • ASP.NET MVC 单点登录和角色

    我使用类似于以下方法的内容跨 2 个 MVC 站点 称为 SiteA 和 SiteB 进行基本的单点登录 http forums asp net p 1023838 2614630 aspx http forums asp net p 10
  • Firefox 单选按钮怪异

    我有一个包含很多无线电组的表格 每个无线电都有一个唯一的 ID 并且与其组中的其他无线电具有相同的名称 该页面验证为 XHTML 过渡页面 在 IE6 和 7 Opera Safari 和 Chrome 中进行了测试 它的工作方式与您想象的
  • 领域驱动设计模式 - 从领域访问存储库

    我一直致力于将领域驱动设计模式应用到我们的 Web 应用程序中 我们遇到的问题之一是避免使用实体内的存储库 例如 我们有一些实体 其方法将触发电子邮件 因此 我们必须有权访问电子邮件模板 存储在数据库中 并在数据库队列表中创建新的电子邮件记
  • 顺序或并行启动存储过程

    我们有一个每晚运行的存储过程 进而启动许多其他过程 其中一些程序在逻辑上可以与其他一些程序并行运行 我如何向 SQL Server 指示一个过程应该并行运行还是串行运行 即 异步启动还是阻塞运行 并行运行它们会产生什么影响 请记住 我已经确
  • java 类在同一个包中找不到其他类

    我正在ubuntu中实现一个java程序 没有将货币转换为欧元的IDE 我有2个类ConvertiEuro和Valuta都在名为finanza的同一目录 包 中 当我尝试编译Valuta时 类ConvertiEuro使用类Valuta ja
  • SQL 差异的原因

    尽管存在 SQL 的 ANSI 标准 但为什么 SQL 发行版如此不标准 SQL 数据库的工作方式真的有那么多有意义的差异吗 还是只是我一直使用的两个数据库 MS SQL 和 PostgreSQL 为什么会出现这些差异 ANSI 标准仅指定
  • 如何检查VC++生成的二进制exe的运行时库类型

    用于对现有构建 二进制文件集 exe dll lib 进行故障排除 有没有办法使用 SDK 或其他实用程序中的命令行工具来快速检查目标文件编译时所针对的运行时库类型 例如 给定的 dll 显然是针对动态运行时编译的 但如果它是调试或发布版本
  • AngularJS $resource 使用方法时调用错误的 API URL:POST

    这不是最容易放入标题的问题 无论如何 我的应用程序是建立在nodejs expressjs并为 url 设置了 API 编辑 我当前使用的代码是 scope updateProduct resource api updateProduct
  • 如何禁用 ReactJs 的 laravel 路由

    我在 Laravel 上的应用程序中遇到了路由问题 因为我在 laravel 资源目录中使用 ReactJs 路由 使用 laravel 5 3 和最新的 React Js 资源 资产 js src Route js const route
  • 如何使用 libjpeg-turbo 编译 OpenCV?

    我在我的一个 C 项目中在 OS X Lion 上使用 OpenCV 2 3 1 虽然我的项目按原样运行得很好 但它很大程度上依赖于 JPEG 解码和编码 我想通过使用 libjpeg turbo 来获得加速 但我找不到与 libjpeg
  • C# 控制台应用程序中 public static void Main() 和 private static void Main() 有什么区别?

    有什么区别 public static void Main and private static void Main 在 C 控制台应用程序中 具体来说 因为它涉及Main 方法 我理解之间的区别public and private 要作为
  • 如何删除谷歌表格中带有标题的空列?

    我有下面的代码可以帮助我删除右端的所有空列 但我在工作表之间也有空列 并且所有这些空列都带有标题 我想删除带标题的空列 有人可以帮助我吗 function removeEmptyColumns var ss SpreadsheetApp g
  • 使用 f:param 传递参数时 f:ajax 不起作用

    我正在单击链接时调用一个方法 以下代码可以使用ajax方式工作
  • 如何使用 Grafana 和 Wamp 的 LDAP 身份验证进行单点登录?

    我正在尝试使用 LDAP 为 grafana 添加单点登录 我遇到过LDAP 的 Grafana 文档 http docs grafana org installation ldap 但我不明白 我可以使用 LDAP 获得单点登录功能吗 如
  • 使用 VSIX 部署包含项目模板 IWizard 的程序集

    我已经为 VS 2010 创建了一个部署项目模板的扩展 项目模板使用自定义向导 在特定程序集中 当我基于此模板创建新项目时会调用该向导 我想将包含向导的程序集打包在 VSIX 中 以便将其部署到模板可以找到它的地方 我知道 GAC 不是 V
  • 转换集合

    有一个对象的集合 示意图 A 1 B 1 A 1 B 2 A 2 B 3 A 2 B 4 A 1 B 5 A 3 B 6 Need A 1 Bs 1 2 A 2 Bs 3 4 A 1 Bs 5 A 3 Bs 6 可以这样 LINQ 吗 No
  • UITextView 触摸事件未触发

    我有一个UITextView我想检测一次点击 看起来我只需覆盖就可以了touchesEnded withEvent并检查 touches anyObject tapCount 1 但是这个事件甚至没有触发 如果我像这样重写 4 个事件 vo
  • 如何修复:预期具体生命周期,但发现绑定生命周期参数

    我目前正在听这个问题 我试图将其缩小到最小的可重现示例 struct Request struct ResponseWriter lt a gt dummy a deriving Clone pub struct RouteStore pu