2016-10-18 15 views
7

Tôi có thể thực hiện việc này:Độ dài mảng có thể được suy ra trong Rust không?

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

Nhưng tại sao tính năng này không hoạt động?

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

Dường như với tôi rằng độ dài là thừa và tầm thường để suy ra. Có cách nào để tránh phải xác định rõ ràng không? (Và không phải chắp thêm f32 vào tất cả các chữ.)

Trả lời

19

_ chỉ có thể được sử dụng trong hai ngữ cảnh: theo mẫu, để khớp với giá trị bỏ qua và làm trình giữ chỗ cho loại. Trong các loại mảng, độ dài không phải là một loại, nhưng một biểu thức và _ không thể được sử dụng trong các biểu thức.

Những gì bạn có thể làm, tuy nhiên, chỉ thêm f32 vào một trong các chữ cái và bỏ qua loại hoàn toàn. Vì tất cả các mục của một mảng phải có cùng một kiểu, trình biên dịch sẽ suy ra kiểu phần tử chính xác cho mảng đó.

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

Nếu bạn đang xử lý các hằng số hoặc biến tĩnh (và bạn phải chỉ định loại), thông thường sử dụng loại slice thay thế: 'static FOO: & [f32] = & [3.0, ...] ; ' –

+0

thì bạn có thể sử dụng' const', trừ khi bạn cần có slice trong bộ nhớ tĩnh (ví dụ nếu bạn cần '& 'static & [f32]'). – bluss

Các vấn đề liên quan