我可以使用方法或函数作为闭包吗?

时间:2015-09-30 03:15:36

标签: rust

我在结构上有一些方法,我想作为参数传递。我很确定传递函数的唯一方法是使用闭包。有没有办法,我可以做到这一点,而不做 || { self.x() }

1 个答案:

答案 0 :(得分:5)

绝对可以使用方法或函数作为闭包。您可以使用函数或方法的完整路径,包括特征方法:

免费功能:

struct Monster {
    health: u8,
}

fn just_enough_attack(m: Monster) -> u8 {
    m.health + 2
}

fn main() {
    let sully = Some(Monster { health: 42 });
    let health = sully.map(just_enough_attack);
}

固有的方法:

struct Monster {
    health: u8,
}

impl Monster {
    fn health(&self) -> u8 { self.health }
}

fn main() {
    let sully = Some(Monster { health: 42 });
    let health = sully.as_ref().map(Monster::health);
}

特质方法:

fn main() {
    let name = Some("hello");
    let owned_name = name.map(ToOwned::to_owned);
}

请注意,参数类型必须完全匹配,包括by-reference或by-value。