, , and_then() Result, , , : read_to_string() Result<String, IoError>, json::decode() Result<T, DecoderError>, - Rust, .
, RFC, , .
.
, iter() . , - , Iterator<&Vec<f64>>. , , .
&v , v , :
|&v| [v[0], v[1]] // v is Vec<f64>
:
|r| {
let v = *r;
[v[0], v[1]]
}
, , int, enums/tuples/etc, Vec<T> , , .
-, & &v ( collect(), ):
points.iter().map(|v| [v[0], v[1]]).collect()
, , - , trait, .
, into_iter() iter():
points.into_iter().map(|v| [v[0], v[1]]).collect()
into_iter() on Vec<T> , T, &T iter(), v Vec<f64>. into_iter() , points , , , points .
. JSON , [f64, ..2], , Rust . Decodable :
extern crate serialize;
use serialize::{Decoder, Decodable};
use serialize::json;
struct Point(f64, f64);
impl Decodable for Point {
fn decode<D: Decoder>(d: &mut D) -> Result<Point, D::Error> {
d.read_tuple(2, |d| {
d.read_tuple_arg(0, |d| d.read_f64()).and_then(|e1|
d.read_tuple_arg(1, |d| d.read_f64()).map(|e2|
Point(e1, e2)
)
)
})
}
}
fn main() {
let s = "[[1, 2], [3.5, 2.7], [0, -2.1]]";
let v: Vec<Point> = json::decode(s).unwrap();
println!("{}", v);
}
( )
, [f64, ..2], Point struct, .
, Decodable Decoder , rustc --pretty=expanded .
, Rust