私は非常にうまくいけば、スライスで遊んでいます。スライス上のインデックス作成操作の戻り値の型は何ですか?
私は私の最初の問題が減少している。しかし、コンパイラは私を与え
pub trait Index<Index> {
type Output;
fn index(&'a self, index: &Index) -> &'a <Self as Index<Index>>::Output;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
:slice[index]
の戻り値の型がdocumentation与えられた基準、ことが私の予想である
fn at<'a, T>(slice: &'a [T], index: usize) -> &'a T {
let item = slice[index];
item
}
エラー:
error: mismatched types: expected
&'a T
, foundT
(expected &-ptr, found type parameter)item ^~~~
私はmeaと解釈しますitem
の型が関数の戻り値の型と一致していないことを確認しました(私はitem
をデバッグ目的のためだけに導入し、式評価をreturnから分割しました)。
戻り値の型をitem
のT
に変更すると、明らかに借り入れから移動するというエラーメッセージが表示されます。
ビットをいじった後、私は最終的に2の回避策を得た:
fn at<'a, T>(slice: &'a [T], index: usize) -> &'a T {
&slice[index]
^
}
fn at<'a, T>(slice: &'a [T], index: usize) -> &'a T {
let ref item = slice[index];
^~~
item
}
は、トリックを行う基準となるタイプを強制的に。
しかし、なぜそれらの嫌悪感は最初に必要ですか?何か間違っていますか?
ああ!わかりましたので、私は[]の砂糖につかまってしまいました!私は '' T 'を '' T' 'が '' T' 'を使って '' index'を呼び出すことに賛成するという違いをすでに知っていましたが、違いを期待していなかったので、 ''インデックス 'イラストをありがとう、本当に物事を視覚化するのに役立ちます。 –