偶尔我发现自己想要编写可以通过以下两种方式调用的函数: // With a string literal: let lines = read_file_lines("data.txt"); // With a string pointer: let file_name = ~"data.txt"; let lines = read_file_lines(file_name); 我的第一个猜测是使用借用指针( &str )作为参数types,但是当它不工作(它只允许我使用@str和@str )时,我尝试了下面的方法(通过复制Rust库)哪些工作。 fn read_file_lines<'a>(path: &'a str) -> ~[~str] { let read_result = file_reader(~Path(path)); match read_result { Ok(file) => file.read_lines(), Err(e) => fail!(fmt!("Error reading file: %?", e)) } } 问题是我不明白我在做什么。 从我可以收集(主要是编译器错误),我声明一个没有限制的生命周期,并用它来描述path参数(意味着任何生命周期可以作为parameter […]
我是NHibernate的新手,在过早closures会话时遇到了一些问题。 我已经通过重用会话而不是每个事务打开一个会话来解决这个问题。 不过,我的印象是,每次需要时打开会话是会话生命周期pipe理的推荐方法。 没有? 所以; 推荐的处理会话的方式是什么? 他们的一生应该是什么? 一个会话pr交易? 一个单独的会话来处理一切? 或者是什么? 编辑: 请注意,我的应用程序体系结构是与服务器端服务进行通信的桌面应用程序,这是所有数据库使用NHibernate + Fluent处理的内容。 (如果这有什么区别…)
我有一个线程,启动工作线程,都预计永生。 每个工作线程维护它自己的Socket列表。 有些操作要求我遍历当前活着的所有套接字,但是我在生成时尝试创build一个包含指向另一个列表所拥有的套接字的套接字的主列表。 use std::{str, thread}; use std::thread::JoinHandle; use std::io::{Read, Write}; use std::net::{TcpListener, TcpStream}; use std::sync::{Arc, Mutex}; use std::ops::DerefMut; use std::sync::mpsc::{channel, Sender, Receiver, TryRecvError}; use self::socketlist::SocketList; use self::mastersocketlist::MasterSocketList; pub struct Socket { user: String, stream: TcpStream, } mod socketlist { use self::SocketList::{Node, End}; use super::Socket; pub enum SocketList { Node(Socket, Box<SocketList>), End, } impl SocketList […]