我想在函数之间传递ssh2::Sftp
结构。此结构取决于ssh2::Session
,std::net::TcpStream
又取决于extern crate ssh2;
use std::path::Path;
use std::net::TcpStream;
fn new_sftp<'a>() -> ssh2::Sftp<'a> {
let tcp = TcpStream::connect("localhost").unwrap();
let mut session = ssh2::Session::new().unwrap();
session.handshake(&tcp).unwrap();
session.userauth_pubkey_file("user", None, Path::new("/home/user/.ssh/id_rsa"), None)
.unwrap();
session.sftp().unwrap()
}
fn main() {
let sftp = new_sftp();
}
。
error: `session` does not live long enough
session.sftp().unwrap()
^~~~~~~
错误:
ssh2::Sftp
我试图以这种方式做,但我不明白extern crate ssh2;
use std::path::Path;
use std::net::TcpStream;
struct Sftp {
tcp: TcpStream,
session: ssh2::Session,
sftp: ssh2::Sftp,
}
fn main() {
let tcp = TcpStream::connect("localhost").unwrap();
let mut session = ssh2::Session::new().unwrap();
session.handshake(&tcp).unwrap();
session.userauth_pubkey_file("user", None, Path::new("/home/user/.ssh/id_rsa"), None)
.unwrap();
let sftp = session.sftp().unwrap();
let sftp = Sftp {
tcp: tcp,
session: session,
sftp: sftp,
};
}
的选项有效期:
ssh::Sftp
更新
我有几个与文件一起使用的函数。我想创建一个新类型,它有一个函数&#34; open&#34;,它返回一个文件描述符,无论文件在哪里(在本地计算机上或在远程计算机上)。现在,我试图弄清楚如何将function main() {
var arrayOfData = [["01/06/2016", "JOE BLOGGS , AB12CDE , VIA APP - PYMT", -225], ["01/06/2016", "JAY BLOGGS , ZX34CDF , VIA APP - PYMT", -665], ["01/06/2016", "JOHN BLOGGS , AG57HNE , VIA APP - PYMT", -500]],
codeArray = ["AG57HNE", "ZX34CDF", "AB12CDE"],
results = [];
arrayOfData.forEach(function (a) {
var code;
codeArray.some(function (b) {
if (a[1].indexOf(b) !== -1) {
code = b;
return true;
}
}) && results.push(a[0], code, a[1], a[2]);
});
return results;
}
console.log(main());
保留在这种新类型中。我认为每次调用函数&#34; open&#34;时创建一个新结构并不是最好的,因为创建新东西总是需要资源。也许编译器理解我想要的东西并优化这个地方,但我不确定。