我有a的形式的纬度,f64我需要将它转换成一个String.起初我想过实现Display,像这样:
struct Latitude(f64);
impl fmt::Display for Latitude {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{} {}", if self.0 > 0. { "N" } else { "S" }, self.0)
}
}
fn main() {
let lat: f64 = 45.;
println!("{}", Latitude(lat));
}
Run Code Online (Sandbox Code Playgroud)
在那之后,我有额外的要求.我需要转换为两种表示形式之一:
N 70.152351N 70° 09' 08"还有一个额外的旗帜; 什么时候false,我需要这样的东西:
- --.------ - --° -' -"实现这一目标的最简单方法是:
fn format_lat(degree: f64, use_min_sec_variant: bool, is_valid: bool) -> String;
Run Code Online (Sandbox Code Playgroud)
但是,我在Rust标准库中看不到任何自由函数.
也许我应该使用struct Latitude(f64)并实现一个to_string方法?或许我应该实施其他一些特质?
您可以使用不同类型的格式创建包装类型,并将它们作为方法返回:
struct Latitude(f64);
struct MinutesSeconds(f64);
impl Latitude {
fn minutes_seconds(&self) -> MinutesSeconds {
MinutesSeconds(self.0)
}
}
impl fmt::Display for MinutesSeconds {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "latitude in a different format")
}
}
Run Code Online (Sandbox Code Playgroud)
这是同样的想法Path::display.
至于有效/无效的概念,听起来你真的想要一个struct Latitude(Option<f64>),然后None在它无效时提供.
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |