我试图理解什么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有人可以通过举例解释什么意思吗?我什至无法想象我们可以在哪里使用它以及为什么。
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)
什么是执行的原因AsRef为User,如果我可以随便拿一个参考&user?执行的规则是AsRef什么?
PS:我在其他论坛和文档中找不到任何可以回答这些问题的内容。
我定义了两个结构
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/geometry,rs在该文件夹下创建三个文件:
// /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) 我经常在 Dockerfiles 中看到以下行
ENV BUNDLE_FROZEN=true
Run Code Online (Sandbox Code Playgroud)
我检查了捆绑程序文档,它显示“不允许更改 Gemfile”。但我很困惑为什么有人会想要禁止人们更改 Gemfile。毕竟,随着项目的发展,我们可能会添加新的宝石。有人可以解释一下为什么我们需要这个环境变量,如何以及何时使用它,以及为什么它经常出现在 Dockerfile 中?
在 Rails API 应用程序中,我们没有现成的 CSRF 保护。特别是,不建议将访问令牌(例如 JWT)存储在 localStorage 中,建议存储在 cookie 中(带有 httpOnly 标志、SameSite 等)。但这一次我们很容易受到潜在的 CSRF 攻击。在全栈生成的 Rails 应用程序中,每次打开表单时都会生成并嵌入一个 CSRF 令牌。但是,我不知道也找不到任何我们如何在 Rails API 应用程序中使用令牌来防止 CSRF 的信息。我们有最佳实践吗?或者有人可以建议一种方法吗?我使用访问和刷新 JWT。