2015-01-25 3 views
3

저는 녹을 조금 배우기 시작했고 해결할 수없는이 문제에 부딪혔습니다.std :: num :: Float :: epsilon() 같은 정적 특성 메서드를 호출하는 방법?

녹에서는 Std :: num :: Float 형 식 (및 다른 형질에서도)의 정적 메서드가 매개 변수를 사용하지 않습니다. 괜찮을거야.하지만 전화 할 수 없다. 나는이 선택권을 시도했다 :

Float::epsilon()   // complains that "type annotations required" 
Float::<f32>::epsilon() // complains "too many type parameters provided" 
Float::epsilon::<f32>() // same thing as the previous one 
f32::epsilon()   // I'd love this syntax to work, but it doesn't 

거기 누구가이 문제를 달려들 었는가? 그것은 나만 바보가 되는가, 아니면 이것이 Rust 자체 내에서 진짜 문제인가?

답변

7

특성에 대한 정적 방법은 Float::epsilon과 같이 호출됩니다. 즉, Self 유형의 특성과 일치하는 유형 힌트를 제공하면 이것이 작동합니다.

use std::num::Float; 

let eps: f32 = Float::epsilon(); 

는 콘크리트 특성의 구현을 다른 방법으로 추론하는 것은 불가능합니다 경우 모든 서명에는 Self가없는 경우, 예를 들어, 특정 형질 메소드를 호출하는 일반적인 구문입니다 :

<f32 as Float>::epsilon() 

또는 유형 매개 변수 F: Float있는 경우 :

<F as Float>::epsilon() 
+0

감사합니다,이 작동합니다. 그러나 로컬 컴파일러 (최첨단 버전이 아닌)에서 작동하지 않기 때문에 일반 구문은 최근에 추가되었을 것입니다. 그러나 Rust의 웹 사이트에서 작동하므로 컴파일러를 업데이트해야합니다. :) – faiface

+0

특성에 대한 메서드를 직접 호출 할 수 있다는 것이 매우 흥미 롭습니다. – Byron

관련 문제