パラメータ関数に渡され、変更することができる。関数パラメータであるスライスを変更するにはどうすればよいですか?
fn set_42(int: &mut i32) {
*int += 42;
}
fn main() {
let mut int = 0;
set_42(&mut int);
println!("{:?}", int);
}
Output:単純スライスを使用するようにコードを変更
42
エラーの全体の束で失敗:
fn pop_front(slice: &mut [i32]) {
*slice = &{slice}[1..];
}
fn main() {
let mut slice = &[0, 1, 2, 3][..];
pop_front(&mut slice);
println!("{:?}", slice);
}
<anon>:2:14: 2:27 error: mismatched types:
expected `[i32]`,
found `&[i32]`
(expected slice,
found &-ptr) [E0308]
<anon>:2 *slice = &{slice}[1..];
^~~~~~~~~~~~~
<anon>:2:14: 2:27 help: see the detailed explanation for E0308
<anon>:2:5: 2:11 error: the trait `core::marker::Sized` is not implemented for the type `[i32]` [E0277]
<anon>:2 *slice = &{slice}[1..];
^~~~~~
<anon>:2:5: 2:11 help: see the detailed explanation for E0277
<anon>:2:5: 2:11 note: `[i32]` does not have a constant size known at compile-time
<anon>:2:5: 2:11 note: the left-hand-side of an assignment must have a statically known size
error: aborting due to 2 previous errors
私たちは、私が本当に欲しいものではありません可変スライスを(使用してみた場合、
fn pop_front(mut slice: &mut [i32]) {
slice = &mut {slice}[1..];
}
fn main() {
let mut slice = &mut [0, 1, 2, 3][..];
pop_front(&mut slice);
println!("{:?}", slice);
}
:私はちょうどそれが要素の狭い範囲)と可変パラメータをカバーしていて、スライス自体を変更したい、スライス内の値を変更したくない、それは元のスライスには影響しません
[0, 1, 2, 3]
質問:関数のパラメータだスライスを修正する方法はありますか?私はスライス内の要素を変更したくありません。私はちょうどスライス自体の範囲を変更して、より小さな「サブスライス」にしたいと思っています。
詳しい説明と寿命の注釈についてはありがとうございます。それは信じられないほど役に立つ! – Cornstalks