2016-10-18 12 views
7

mogę to zrobić:Czy długość rurek można wywnioskować w Rust?

let a: [f32; 3] = [0.0, 1.0, 2.0]; 

Ale dlaczego to działa?

let a: [f32; _] = [0.0, 1.0, 2.0]; 

Wydaje mi się, że długość jest zbędna i nieistotna do wywnioskowania. Czy istnieje sposób na uniknięcie konieczności wyraźnego określenia? (I bez konieczności dołączania f32 do wszystkich literałów.)

Odpowiedz

19

może być używany tylko w dwóch kontekstach: we wzorach, do dopasowania wartości do zignorowania oraz jako symbol zastępczy dla typu. W typach tablic długość nie jest typem, ale wyrażeniem, a w wyrażeniach nie można używać wartości _.

Możesz jednak dodać tylko jeden z literałów i całkowicie pominąć ten typ. Ponieważ wszystkie elementy tablicy muszą mieć ten sam typ, kompilator wywnioskuje prawidłowy typ elementu dla tablicy.

let a = [0.0f32, 1.0, 2.0]; 
+1

Jeśli masz do czynienia ze stałych lub zmiennych statycznych (i trzeba określić typ) to powszechne użycie typu plaster zamiast: 'FOO statyczny: & [F32] = & [3,0, ...] ; ' –

+0

następnie możesz użyć' const', chyba że musisz sam kawałek w pamięci statycznej (tj. Jeśli potrzebujesz '& 'static & [f32]'). – bluss

Powiązane problemy