2013-11-01 2 views
4

저는 Rust에서 "match"를 조금 사용했습니다. 해결책이 있어야하기 때문에이 문제에 대한 해결책을 모색했습니다. 다음 예제에서 생성 된 난수가 0이 아닌 경우 생성 된 난수를 i_bal 변수에 할당하려고합니다. 즉, 내 예제에 따라 "23456"을 할당하는 대신 테스트중인 실제 임의의 숫자를 일치로 지정하고 싶습니다. 이 문제를 해결하는 더 좋은 방법이 있다는 것을 알고 있지만,이 방법을 사용하여 해결책을 알고 싶습니다.어떻게 녹을 사용하여 결과로 일치되는 값을 할당합니까?

예 :

let i_bal: i64 = match std::rand::task_rng().gen() { 
    0 => 1234, 
    _ => 23456 
}; 

답변

8

대신 와일드 카드 패턴이 변수 패턴을 사용할 수 있습니다. 그들은 둘 다 일치하지만, 변수 패턴과 일치하는 값은 이름에 바인딩 :

let i_bal: i64 = match std::rand::task_rng().gen() { 
    0 => 1234, 
    x => x 
}; 

왜 어떤 경우에는 당신이 와일드 카드 패턴은 당신이 분명히 그렇게하지 그것을 만들 정도로 사용하려는 것 값이 필요하므로 불필요한 변수 이름을 사용하여 범위를 오염시킬 필요가 없습니다.

예를 들어, (하이, 로우, 오픈, 닫기)의 튜플이 있고 변수의 하이 및 로우만 원할 경우 그것에서 당신은 할 수 있었다 :

let (high, low, _, _) = tickerData 
+0

감사합니다. 문서를 다시 읽으면 내가 말하는 것을 알 수 있습니다. 보다 직설적 인 예가 더 명확 해 졌을 것이라고 생각합니다. 당신의 답을 똑딱 거릴 것입니다. 문서는 (부분적으로) "패턴의 변수 이름은 모든 값과 일치합니다"라고 말합니다. uninitiated (me)에게, 그것은 하나의 이름을 사용함으로써 변수를 생성한다는 것을 알지 못한다면 (나는 추정한다) 이해가되지 않는다. 나는 그것이 match 문 외부의 변수를 참조했다고 추정했다. 그것은 성명서 자체에 대한 제 의견을 손상시키지 않습니다 - 매우 강력합니다 (그리고 휴식은 없습니다!). 변수 이름을 사용하는 것은 "_"과 같은 것으로 나타납니다. –

관련 문제