2015-10-11 22 views
2

如何在需要FnMut類型的環境中使用盒裝封口,例如你如何在FnMut上下文中使用盒裝封閉?

pub fn main() { 
    for n in (0..10).map(Box::new(|i| i * 2)) { 
    println!("{}", n); 
    } 
} 
+1

注意'箱'不IMPL了'FnMut'特點,但是這是有可能未來可能會有所改進。 – bluss

+0

我有這種感覺,你在問錯誤的問題。你真的想解決什麼問題? – sellibitze

+0

我想在結構中存儲'Map'或'FlatMap'迭代器,並將閉包作爲參數。感謝reddit,現在我手動創建了一個實現'FnMut'的結構,並將其用作'map'的參數。 – bfops

回答

1

由於Box實現Deref特質,你可以簡單地反引用您的box編輯功能:

fn main() { 
    let boxed_fn = Box::new(|i| i * 2); 
    for n in (0..10).map(*boxed_fn) { 
     println!("{}", n); 
    } 
} 
+0

這是否意味着'map'表達式的類型現在很難表達? – bfops

+0

「難以表達」是什麼意思? – antoyo

+0

我認爲這個類型不能寫成「封閉的形式」,而沒有額外的通用參數,例如http://is.gd/pttpBX。嘗試存儲迭代器時,這是有問題的。通常我的解決方案是打開封口! – bfops