小编Har*_*ork的帖子

T 形式的生命周期界限:'a

我试图理解什么T: 'a意思,我想,它T是一种类型,'a是一生。

我理解什么'a: 'b意思:( ) 比 ( ) 寿命长x,所以我们不能在下面的代码中分配给'ay'byx

fn foo<'a, 'b, T>(mut x: &'a T, mut y: &'b T) 
   where 'a: 'b {
  x = y; //compile time error
}
Run Code Online (Sandbox Code Playgroud)

这本参考书上写到

T: 'a意味着所有生命周期参数都T失效了'a

但我对“所有生命周期参数T”感到困惑。什么是“ (类型?)T 的生命周期参数”?我知道,这个签名'a就是一生。意思是一样的吗?xfn foo<'a, T>(x: &'a T)

T:'a有人可以通过举例解释什么意思吗?我什至无法想象我们可以在哪里使用它以及为什么。

lifetime rust

7
推荐指数
1
解决办法
193
查看次数

何时以及为何使用 AsRef&lt;T&gt; 而不是 &amp;T

AsRef 文档写入

用于进行廉价的引用到引用转换。

我明白reference-to-reference部分是什么意思cheap?我希望它与复杂性理论(大哦,等等)“便宜”无关。

例子:

struct User {
  email: String, 
  age: u8,
}

impl AsRef<User> for User {
  fn as_ref(&self) -> &User {
     &self
  }
}

fn main() {
  let user = User { email: String::from("myemail@example.com"), age: 25 };
  let user_ref = &user;
  //...
}
Run Code Online (Sandbox Code Playgroud)

什么是执行的原因AsRefUser,如果我可以随便拿一个参考&user?执行的规则是AsRef什么?

PS:我在其他论坛和文档中找不到任何可以回答这些问题的内容。

generics polymorphism traits rust parametric-polymorphism

7
推荐指数
2
解决办法
1096
查看次数

在单独的文件中定义特征

我定义了两个结构

pub struct Rect {
    pub width:  f32,
    pub length: f32
}

//and

pub struct Circle {
    pub radius:  f32
}

Run Code Online (Sandbox Code Playgroud)

然后我定义了一个特征,Area并为Circle和实现了这个特征Rect。当我将所有源代码放在一个main.rs文件中时,一切正常。

现在我想组织我的源代码。特别是,我想创建一个文件夹/src/geometryrs在该文件夹下创建三个文件:

// /src/geometry/rect.rs
pub struct Rect {
    pub width:  f32,
    pub length: f32
}
Run Code Online (Sandbox Code Playgroud)
// /src/geometry/circle.rs
pub struct Circle {
    pub radius:  f32
}
Run Code Online (Sandbox Code Playgroud)

// /src/geometry/traits.rs
pub trait Area {
    fn area(&self) -> f32;
}
Run Code Online (Sandbox Code Playgroud)

最后我想使用这些来自main.rs.

我花了几天时间,通读了我在 Internet 上找到的所有示例,但仍然无法使其正常工作。有什么建议?

更新:项目结构:

src
  geometry …
Run Code Online (Sandbox Code Playgroud)

module traits rust

5
推荐指数
1
解决办法
527
查看次数

使用 BUNDLE_FROZEN

我经常在 Dockerfiles 中看到以下行

ENV BUNDLE_FROZEN=true
Run Code Online (Sandbox Code Playgroud)

我检查了捆绑程序文档,它显示“不允许更改 Gemfile”。但我很困惑为什么有人会想要禁止人们更改 Gemfile。毕竟,随着项目的发展,我们可能会添加新的宝石。有人可以解释一下为什么我们需要这个环境变量,如何以及何时使用它,以及为什么它经常出现在 Dockerfile 中?

ruby ruby-on-rails bundler

4
推荐指数
1
解决办法
2589
查看次数

Rails API 应用程序的 CSRF 令牌

在 Rails API 应用程序中,我们没有现成的 CSRF 保护。特别是,不建议将访问令牌(例如 JWT)存储在 localStorage 中,建议存储在 cookie 中(带有 httpOnly 标志、SameSite 等)。但这一次我们很容易受到潜在的 CSRF 攻击。在全栈生成的 Rails 应用程序中,每次打开表单时都会生成并嵌入一个 CSRF 令牌。但是,我不知道也找不到任何我们如何在 Rails API 应用程序中使用令牌来防止 CSRF 的信息。我们有最佳实践吗?或者有人可以建议一种方法吗?我使用访问和刷新 JWT。

security ruby-on-rails csrf rails-api csrf-token

3
推荐指数
1
解决办法
2161
查看次数