如何在依赖于另一个结构的函数之间传递结构?

时间:2016-07-26 09:01:42

标签: struct rust lifetime

我想在函数之间传递ssh2::Sftp结构。此结构取决于ssh2::Sessionstd::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;时创建一个新结构并不是最好的,因为创建新东西总是需要资源。也许编译器理解我想要的东西并优化这个地方,但我不确定。

0 个答案:

没有答案