我正在尝试创建一个返回Shader特征实例的函数.这是我极为简化的代码:
trait Shader {}
struct MyShader;
impl Shader for MyShader {}
struct GraphicsContext;
impl GraphicsContext {
fn create_shader(&self) -> Shader {
let shader = MyShader;
shader
}
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
error[E0277]: the trait bound `Shader + 'static: std::marker::Sized` is not satisfied
--> src/main.rs:10:32
|
10 | fn create_shader(&self) -> Shader {
| ^^^^^^ `Shader + 'static` does not have a constant size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `Shader …Run Code Online (Sandbox Code Playgroud) 我有一个库函数f1,rust它返回一个字符串,并希望更新它以选择性地返回一个向量。
fn f1() -> String {
"abc"
}
fn f2() -> (String, Vec<usize>) {
"abc", vec![(0, 1, 2)]
}
fn f3(flag: bool) -> ? {
if (flag)
"abc", vec![(0, 1, 2)]
else
"abc"
}
Run Code Online (Sandbox Code Playgroud)
是否可以有多个返回路径,例如f3?
我想在Rust写一个简单的电视剧集文件重命名器.
解析文件名,可能是几种类型之一(基于日期,季节/剧集编号等).然后,此解析的文件将变为"填充文件",其中包含来自数据库的数据(然后将其格式化为新文件名)
最初我尝试使用该parse方法获取文件名并返回枚举变体:
enum ParsedFile{
DateBased{series: String, date: Date},
SeasonBased{series: String, season: i32, episode: i32},
// etc
}
fn parse(fname:&str) -> Option<ParsedFile>{
...
}
Run Code Online (Sandbox Code Playgroud)
这很好,但是ParsedFile为每一集拍摄和做不同的事情的方法变得混乱
例如,要将ParsedFile->PopulatedFile转换分离为单独的方法,我必须匹配变体,然后在方法中对其进行解构
struct PopulatedFile {
seriesname: String,
season: i32,
episode: i32,
episodename: String,
airdate: Date,
}
fn _populate_seasonbased(file: ParsedFile) -> Result<PopulatedFile, TvdbError>{
// can't just access file.season or file.episode, have to destructure enum again
}
fn populate(f: ParsedFile) -> Result<PopulatedFile, TvdbError> {
return match f {
ParsedFile::DateBased{..} =>
_populate_datebased(f),
// …Run Code Online (Sandbox Code Playgroud)