I have some methods on a struct that I'd like to pass around as parameters. I'm pretty sure the only way to pass around functions is by using closures. Is there a way I can do this without doing
|| { self.x() }
?
A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function's scope from an inner function.
Webpack, Babel, UglifyJS, and TypeScript are the most popular alternatives and competitors to Closure Compiler.
Difference between Function and ClosureFunction is declared using func keyword whereas Closure doesn't have func keyword. Function has always name but Closure doesn't have. Function doesn't have in keyword but closure has in the keyword.
Yes, exactly. As you've identified, every function in JavaScript is a closure over at least one context: The global context.
You can absolutely use a method or a function as a closure. You use the full path to the function or method, including trait methods:
A free function:
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);
}
An inherent method:
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);
}
A trait method:
fn main() {
let name = Some("hello");
let owned_name = name.map(ToOwned::to_owned);
}
Note that the argument type must match exactly, this includes by-reference or by-value.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With