- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个要传递给多个函数的 LdapConn。目前我将 ldap 变量传递给一个函数然后返回它。在函数内部,我没有对 ldapConn 进行任何危险的修改,我只是更改了搜索结果部分。传递它是可行的,但是让变量持续整个程序长度的最佳方法是什么?
//main.rs
let mut ldap: LdapConn = LdapConn::with_settings(
LdapConnSettings::new()
.set_no_tls_verify(true)
.set_starttls(true),
"ldaps://ldap.example.com:636",
)
.unwrap();
//other_file.rs
pub fn get_group_members(group: &str, mut conn: LdapConn) -> (LdapConn, Vec<String>) {
let (s_filter, ou) = split_dn(group);
let search_result = conn
.search(
&ou,
Scope::Subtree,
&format!("(&(objectClass=group)({}))", s_filter),
vec!["member"],
)
.unwrap();
let resp: Vec<
std::collections::HashMap<std::string::String, std::vec::Vec<std::string::String>>,
> = search_result
.0
.iter()
.map(|x| SearchEntry::construct(x.clone()).attrs)
.collect();
(conn, trim_users(resp[0].get("member").unwrap().to_vec()))
}
//main.rs
let (ldap, users) = get_group_members(group, ldap);
PS: LdapConn 不可克隆
https://docs.rs/ldap3/latest/ldap3/struct.LdapConn.html
The API is virtually identical to the asynchronous one. The chiefdifference is that LdapConn is not cloneable: if you need anotherhandle, you must open a new connection.
最佳答案
您应该始终尽量减少干扰。这意味着:如果你能接受 &
,你就应该这样做。如果没有,如果可以的话,你应该使用 &mut
。并且只有在您别无选择的情况下,您才应该拥有一个值(value)。在您的情况下,您将需要对连接的唯一访问权限,因此 &
是不可能的。然而,&mut
是公平的游戏。
pub fn get_group_members(group: &str, conn: &mut LdapConn) -> Vec<String> {
...
}
// main.rs
let mut ldap = ...;
let users = get_group_members(group, &mut ldap);
您偶然发现的(即,您可以传递所有权并收回所有权)称为 linear typing .它是 Rust 类型系统的起源,借用检查器就是基于它构建的。始终传递所有权并收回所有权本身并没有什么错误(从数学上讲),只是不断接受您刚刚放弃的东西的所有权变得非常乏味。这正是 Rust 允许借用的原因,以防止这种情况失控。
关于rust - 我应该为变量添加生命周期还是在 Rust 函数之间传递它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73210168/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!