6

&variableパターンまたはクロージャー引数で使用されるとはどういう意味ですか?

for &code in self.exit_code.iter() { ... }

let mut new_seps = do seps.iter().fold(~[]) |result, &next| { ... }

ここでは&code、ループとクロージャの定義に and&nextがあります。これらのサインインはどういう意味ですかfor? アンパサンドなしで単純にand&を使用できないのはなぜですか? パターンマッチングの修飾子と関係ありますか? トレイト実装の in引数に関連していますか?codenextref&self

現在の Rust リファレンス マニュアルでもチュートリアルでも、この構文に関する情報は見つかりませんでした。現在、これはある種の暗黙的な逆参照であると考えています (これは&、パターンで省略した場合に表示されるエラー メッセージに由来します) が、よくわかりません。

4

1 に答える 1

9

これは、 type の何かを「破壊」するパターン マッチ&Tです。つまり、

let &x = &1i; 

xtype int、および value 1 を持っています。したがって、実際には反対refです(@KerrekSBが言っていることを実行しref x、値ではなく参照によってキャプチャします)。

に似ていると見なすことができます。

match returns_an_option() {
    Some(a) => { ... }
    None => { ... }
}

&Tis &、 notSomeまたはのコンストラクタを除いてNone


この特定の例では、 はベクトルだと思いますseps(あなたが述べたエラーは、おそらく a であることを示しています&[&str])。したがって、.iter()は を実装するオブジェクトを返します。つまりIterator<& &str>、ベクトル ( ) の要素への参照に対する反復子&strです。したがって、nextオリジナルに到達するには、何らかの方法で逆参照する必要があり&strます。これは&、パターン マッチ (コードが示すように)または使用*next時に行うことができます。

(参照/借用ポインタ (すなわち)&から所有権を移動することはできないため、パターンは暗黙的にコピー可能な型でのみ機能することに注意してください。)&T

于 2013-09-28T14:17:07.423 に答える