rustc 1.0.0 में, मैं एक ऐसा फ़ंक्शन लिखना चाहता हूं जो कॉलर द्वारा प्रदान की गई दो आयामी सरणी को उत्परिवर्तित करे। मुझे उम्मीद थी इस काम करेगा:एक फंक्शन तर्क के रूप में उत्परिवर्तनीय बहुआयामी सरणी
fn foo(x: &mut [[u8]]) {
x[0][0] = 42;
}
fn main() {
let mut x: [[u8; 3]; 3] = [[0; 3]; 3];
foo(&mut x);
}
यह संकलन करने में विफल रहता है:
$ rustc fail2d.rs
fail2d.rs:7:9: 7:15 error: mismatched types:
expected `&mut [[u8]]`,
found `&mut [[u8; 3]; 3]`
(expected slice,
found array of 3 elements) [E0308]
fail2d.rs:7 foo(&mut x);
^~~~~~
error: aborting due to previous error
मेरा मानना है कि यह कह रहा है कि मैं किसी भी तरह समारोह स्लाइस का एक टुकड़ा को खिलाने के लिए की जरूरत है, लेकिन मैं नहीं जानता कि इसे कैसे बनाया जाए।
यदि मैं फ़ंक्शन हस्ताक्षर में नेस्टेड सरणी की लंबाई को हार्ड-कोड करता हूं तो यह "काम करता है"। यह स्वीकार्य है क्योंकि मैं समारोह मनमाना आयाम की बहुआयामी सरणियों पर काम करना चाहते हैं नहीं है:
fn foo(x: &mut [[u8; 3]]) { // FIXME: don't want to hard code length of nested array
x[0][0] = 42;
}
fn main() {
let mut x: [[u8; 3]; 3] = [[0; 3]; 3];
foo(&mut x);
}
tldr; एक बहुआयामी सरणी के संदर्भ को पारित करने के किसी भी शून्य-लागत के तरीके जैसे कि फ़ंक्शन का उपयोग $ x [1] [2] = 3; $?
आपको https://github.com/rust-lang/rfcs/issues/1038 और सामान्य मूल्य पैरामीटर के बारे में संबंधित पीआर में रुचि हो सकती है –