gpt4 book ai didi

rust - 我可以在 Rust Mustache MapBuilder 中使用循环吗?

转载 作者:行者123 更新时间:2023-11-29 08:19:31 25 4
gpt4 key购买 nike

是否可以在 Rust Mustache ( https://github.com/erickt/rust-mustache ) MapBuilder 中使用循环来填充向量的内容?我附上了一个半工作示例,它适用于结构版本,但不适用于构建器版本。

编辑:感谢 Paul,代码现在可以编译。我遗漏了两件事:|mut builder|builder = builder.push_map

问题是我不想使用结构版本,因为我需要迭代图像向量并根据特定条件改变项目(而且我不想更改原始向量)。

我看过这里https://github.com/erickt/rust-mustache/blob/master/src/builder.rs但这些代码片段都没有显示循环示例。要么这是不可能的,要么我做错了什么。我还创建了一个问题,但那里的 erickt 似乎不太活跃。

谢谢。

main.rs:

extern crate serialize;

// [dependencies.rust-mustache]
//
// # git = "https://github.com/erickt/rust-mustache.git"
// git = "https://github.com/tsurai/rust-mustache.git"
extern crate mustache;

mod with_struct;
mod with_builder;

fn main() {
with_struct::go();
with_builder::go();
}

with_builder.rs:

use std::io;

use mustache;
use mustache::MapBuilder;

struct Image {
name: String,
file: String
}

impl Image {
fn new(name: &str, file: &str) -> Image {
Image {
name: String::from_str(name),
file: String::from_str(file)
}
}
}

pub fn go() {
let images = load_images();
let template = mustache::compile_str(template());

let data = MapBuilder::new()
.insert_vec("images", |mut builder| {
// ^~~~~ Need mutableb builder
for image in images.iter() {
builder = builder.push_map(|builder| {
// ^~~~~~~~~~^~~~~ Need to re-assign the builder
builder
.insert_str("name", image.name.clone())
.insert_str("file", image.file.clone())
});
}
builder
// ^~~~~ Can now return it
})
.build();

let _ = template.render_data(&mut io::stdout(), &data);
}

fn template<'a>() -> &'a str {
"
<ul>
{{#images}}
<li>
<a href=\"{{file}}\">{{name}}</a>
</li>
{{/images}}
</ul>
"
}

fn load_images() -> Vec<Image> {
let mut images = Vec::new();

images.push(Image::new("Picture 1", "picture-1.png"));
images.push(Image::new("Picture 2", "picture-2.png"));
images.push(Image::new("Picture 3", "picture-3.png"));

images
}

with_struct.rs:

use std::io;

use mustache;

#[deriving(Encodable)]
struct Image {
name: String,
file: String
}

#[deriving(Encodable)]
struct TemplateData<'a> {
images: &'a Vec<Image>
}

impl Image {
fn new(name: &str, file: &str) -> Image {
Image {
name: String::from_str(name),
file: String::from_str(file)
}
}
}

pub fn go() {
let images = load_images();
let template = mustache::compile_str(template());

let data = TemplateData {
images: &images
};

let _ = template.render(&mut io::stdout(), &data);
}

fn template<'a>() -> &'a str {
"
<ul>
{{#images}}
<li>
<a href=\"{{file}}\">{{name}}</a>
</li>
{{/images}}
</ul>
"
}

fn load_images() -> Vec<Image> {
let mut images = Vec::new();

images.push(Image::new("Picture 1", "picture-1.png"));
images.push(Image::new("Picture 2", "picture-2.png"));
images.push(Image::new("Picture 3", "picture-3.png"));

images
}

最佳答案

奥利!

您需要删除最后一个 insert_str 之后的分号(如果您将分号放在末尾,Rust 会丢弃该行,并且不会将其用作返回值)。

关于rust - 我可以在 Rust Mustache MapBuilder 中使用循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com