2016-09-07 9 views
-4

VecOptionで繰り返し処理する方法がわかりません。特定の条件が要素の型に合っている場合にのみ動作します。オプション<Vec<T>>で照合することはできますか?

具体的には、ネットワークインターフェイス(IPv4またはIPv6)の可能なすべてのIPアドレスを繰り返し処理し、v4アドレスで何かを実行したいネットワークアプリケーションに取り組んでいます。この場合は印刷したいので、Displayを実装する必要があります。

Debugフォーマッタで私の値を印刷し、私が取得:

Option<Vec<std::net::IpAddr>>ある
Some([V6(fe80::6a5b:35ff:fec7:5eeb), V4(10.0.11.241)]) 

。私はベクトルを繰り返して、のアドレスで、Displayの実装を介して遭遇するすべてのものを繰り返したいと思っています。

std::net::IpAddr

pub enum IpAddr { 
    V4(Ipv4Addr), 
    V6(Ipv6Addr), 
} 

として定義されていることをどのように私はタイプに(だけ私の場合はV4を)列挙型が一致していますか?詳細について

+4

のStackOverflowへようこそ!ここでは、あなたの問題に何らかの努力を払い、あなたがあなたの質問に試したことを記述することが期待されています。下落を避けるために、「これを試しましたが、うまくいかない」や「この言語機能を実際に理解していません」のように、質問に詳細を追加することができます。 –

+2

"私はDisplayメソッドを実装する必要があることを知っている" - >それはあなたが2つの質問をしているか、少なくとも2つのトピックを混合しているようだ。 "[...] Vecのオプションを反復する - >あなたが' Option > 'と言ったタイトルの中にはオプションのベクトルではなくオプションのベクトルがあります。あなたの問題を解決しようとしているコードをいくつかお見せしましょうか?たとえそれが不完全なスーパーであっても、それはおそらく私たちを多く助けます! –

答えて

3
use std::net::IpAddr; 

fn printer(addrs: Option<Vec<IpAddr>>) { 
    if let Some(addrs) = addrs { 
     for addr in addrs { 
      if let IpAddr::V4(v4_addr) = addr { 
       println!("{}", v4_addr) 
      } 
     } 
    } 
} 

、上The Rust Programming Languageセクションを参照してください。

+3

*注*:これは本番環境で動作するコードではありません。単に値を出力するには、これらの値を参照渡しします。 –

関連する問題