2016-08-31 14 views
-1

Rustでは、関数内で定義された条件に従ってオブジェクトを返すことも、何も返さないことも可能ですか? Left腕に行くべき何か何も返すことはできますか?

fn login(self, username: Username, password: Password) -> Calculator_1 { 
     let ch = match self.ch.send(username.to_string()).send(password.to_string()).offer() { 
      Left(ch) => ch, 
      Right(ch) => { ch.close(); return } 
     }; 
     Calculator_1::new(ch) 
    } 

私は錆でセッションタイプライブラリを使用していますので、私は、ユーザー名とパスワードが検証されている場合は、オブジェクトのみを返すことにしたい、例えば:

。検証されていない場合は、Rightアームに行き、プログラムを終了する必要があります。私は本当にこれを返すか、何かを返さないという意味ではうまくいかない。

+3

この質問は下書きされたり閉じたりする可能性があります.Rustの非常に基本的な機能、つまり 'Option 'タイプについて質問しています。しかし、私はそういう疑問を見つけることができませんでしたので、私の知る限り重複していません。したがって、この質問は有効であり、答える価値があるかもしれません。しかし、しかし、あなたはあまりにも(無関係な)情報を提供しました。ですから、あなたはあなたの事例全体を単純化するべきです。 –

答えて

6

Option<T>を使用してください。 Option<T>は、Some(T)(タイプTの数値、Tは汎用タイプのパラメータ)またはNone(値なし)のいずれかを保持できます。詳細については

fn login(self, username: Username, password: Password) -> Option<Calculator_1> { 
    match self.ch.send(username.to_string()).send(password.to_string()).offer() { 
     Left(ch) => Some(Calculator_1::new(ch)), 
     Right(ch) => { ch.close(); None } 
    }   
} 

に錆プログラミング言語Error Handling章をお読みください。

+0

お返事ありがとうございます。なぜ私はまだこのエラーが発生します。私と一緒にいてくださいplsのように私はちょうど初心者ではありませんRustの 'add'という名前のメソッドは' std :: option :: Option Omar

+0

のために見つかりません@Omar存在しないかもしれない何かを使って "追加"しますか?あなたは[本の示唆する章](https://doc.rust-lang.org/stable/book/error-handling.html#composing-optiont- values)を読んだことがありますか?また、[enumsで読む](https://doc.rust-lang.org/stable/book/enums.html)もお勧めです。 – Shepmaster

+0

私の基本的な理解は、OptionはCalculator_1を返すか、何も返さないことです。 Calculator_1を返す場合は、addというメソッドを定義しています。だから、私はそれに直接アクセスできると思った。 – Omar

関連する問題