Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
let s: String = "hello world".into();
let ss = &*s; // ss: &str
let ss: &str = &s; // deref coercion, потому что тип известен
let ss = &s[..];
char * — просто немодифицируемая последовательность символов.use std::path::Path;
struct Model {
u: f32,
}
impl Model {
fn new(file_path: &Path) -> Model {
let texture_path = file_path.with_extension("tga");
println!("path: {:?}", texture_path);
// outputs 'path: "/tmp/models/african_head.tga"'
Model{ u: 1.0 }
}
}
fn main() {
let model = Model::new(Path::new("/tmp/models/african_head.obj"));
}
format! и PathBuf (на gist тоже обновил, ссылка выше):use std::path::{Path, PathBuf};
struct Model {
u: f32,
}
fn texture_fname(path: &Path) -> PathBuf {
let fullname = format!("{}{}", path.file_stem().unwrap().to_str().unwrap(), "_diffuse");
let mut buf = PathBuf::from(path);
buf.set_file_name(fullname);
buf.set_extension("tga");
buf
}
impl Model {
fn new(texture_path: &Path) -> Model {
let texture_path = texture_fname(texture_path);
println!("path: {:?}", texture_path.as_path());
// outputs 'path: "/tmp/models/african_head_diffuse.tga"'
Model{ u: 1.0 }
}
}
fn main() {
let model = Model::new(Path::new("/tmp/models/african_head.obj"));
}
use std::path::{Path, PathBuf};
struct Model {
u: f32,
}
impl Model {
fn new(texture_path: &str) -> Model {
let buf = PathBuf::from(texture_path);
let texture_path = format!("{}/{}{}",
buf.parent().unwrap().to_str().unwrap(),
buf.file_stem().unwrap().to_str().unwrap(),
"_diffuse.tga");
println!("path: {:?}", texture_path);
// outputs 'path: "/tmp/models/african_head_diffuse.tga"'
Model{ u: 1.0 }
}
}
fn main() {
let model = Model::new("/tmp/models/african_head.obj");
}
Model::new передаётся именно путь до файлаformat!("{}{}", path.file_stem().unwrap().to_str().unwrap(), "_diffuse");
а не format!("{}_diffuse", path.file_stem().unwrap().to_str().unwrap());
Пишем свой упрощенный OpenGL на Rust — часть 3 (растеризатор)