偶尔我发现自己想要编写可以通过以下两种方式调用的函数: // 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 […]
在Rust中,指针永远不能为null,所以如果实际上需要null的话,比如链表,可以使用Optiontypes: struct element { value: i32, next: Option<Box<element>>, } 这涉及多less开销(就内存分配而言,以及与简单指针相比,取消引用的步骤)? 在编译器/运行库中是否有一些“魔术”,使得Option可以免费使用,或者比在非核心类库中使用Option实现成本更低(使用相同的enum结构,或者将指针包装在向量)?
music.rs|19 col 1| 22:2 warning: code is never used: `SemanticDirection`, #[warn(dead_code)] on by default 我会重新把这些警告转回到任何严肃的事情上,但是我只是在修改这个语言,而这正在推动我的蝙蝠。 我试着添加: #[allow(dead_code)] 我的代码,但没有工作。
我有一个线程,启动工作线程,都预计永生。 每个工作线程维护它自己的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 […]
鉴于此代码: trait Base { fn a(&self); fn b(&self); fn c(&self); fn d(&self); } trait Derived : Base { fn e(&self); fn f(&self); fn g(&self); } struct S; impl Derived for S { fn e(&self) {} fn f(&self) {} fn g(&self) {} } impl Base for S { fn a(&self) {} fn b(&self) {} fn c(&self) […]