4 ms·
You most definitely can. fn foo<F, T>(f: F) where F: Fn(T), T: ToString, { f("Hello World") } Or did I not understand
by tuetuopay 9mo ago
You most definitely can.
fn foo<F, T>(f: F)
where
F: Fn(T),
T: ToString,
{
f("Hello World")
}
Or did I not understand what you meant?
- armchairhacker 9mo agoSomething like this isn’t possible fn foo(f: impl for<T: ToString> Fn(T)) { f(“Hello World”); f(3.14); } fn main() { f(|x| println!("{}", x.to_string()); } The workaround: trait FnToString { fn call(&self, x: impl ToString); } fn foo(f: impl FnToString) { f.call("Hello World"); f.call(3.14); } struct AnFnToString; impl FnToString for AnFnToString { fn call(&self, x: impl ToString) { println!("{}", x.to_string()); } } fn main() { foo(AnFnToString); }
- tuetuopay 9mo agoHa, yes, I see what you mean now. That's not really the closure's fault but monomorphization of the foo function. The specific thing you want to do would require boxing the value, or do more involved typing.