2016-11-26 4 views
4

タイプの1つが必要ない一般的なデータ型を使用しようとしています(グラフのエッジ加重)。私はこのようになりますされ、このために入力することはありません使用することを考えてきた:タイプのいずれかが不要なジェネリックタイプを指定するにはどうすればよいですか?

#![feature(never_type)] 

struct Foo<T> { 
    bar: T 
} 

impl<T> Foo<T> { 
    fn foo(&mut self, bar: T) { 
     self.bar = bar; 
    } 
} 

fn main() { 
    let mut foo: Foo<!> = Foo { bar: "nada" }; 
    foo.foo("nada"); 
} 

をこれは明らかに"nada"プレースホルダ型不一致が生じますが、ただ何も入力しないと、他のエラーが発生します。 !はここで使用する正しいタイプですか?もしそうなら正しい構文は何ですか?

私は!の代わりに()を使用して動作させていますが、これはタイプの適切な選択であるかどうか確信がありません。 ()にはメモリフットプリントがないので、効率の点で違いはないはずです。

答えて

5

()が適切です。単一の値(()ともいう)を持つ型であるため、値はありますが情報は含まれていません。

!には値がありません。したがって、structに入れると、struct型に値もなく、基本的に使用できなくなります。

+0

この回答は正しいですが、タイプとして '! 'を使用したいと思う*回があります。さらに読む:[RFC 1216](https://github.com/rust-lang/rfcs/blob/master/text/1216-bang-type.md)と対応する[追跡の問題](https:// github。 com/rust-lang/rust/issues/35121)。 – Shepmaster

+1

注意 '!'は使用できないとは言わず、構造体だけはそれほど有用ではありません(ただし、コード自体が '!'のように実行されることはありません)。私は実際にRFC 1216が好きです。 – starblue

関連する問題