<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ### 組合器 Future 的實現往往遵循相同的模式。為了減少重復代碼,`future`庫提供了許多被稱為 “組合器(Combinator)” 的工具,它們是這些模式的抽象,多以 \[`Future`\] 特質相關的函數的形式存在。 ### map [`map`](https://docs.rs/futures/0.1/futures/future/trait.Future.html#method.map)組合器擁有一個 future 并返回一個新 future,新 future 的值是通過前一個 future 調用某個給定的函數獲得的。 之前的`Display`: ``` impl<T> Future for Display<T> where T: Future, T::Item: fmt::Display, { type Item = (); type Error = T::Error; fn poll(&mut self) -> Poll<(), T::Error> { let value = try_ready!(self.0.poll()); println!("{}", value); Ok(Async::Ready(())) } } fn main() { let future = Display(HelloWorld); tokio::run(future); } ``` 用`map`組合器實現HelloWorld: ``` extern crate tokio; extern crate futures; use futures::Future; fn main() { let future = HelloWorld.map(|value| { println!("{}", value); }); tokio::run(future); } ``` `map`的實現: ``` pub struct Map<A, F> where A: Future { future: A, f: Option<F>, } impl<U, A, F> Future for Map<A, F> where A: Future, F: FnOnce(A::Item) -> U, { type Item = U; type Error = A::Error; fn poll(&mut self) -> Poll<U, A::Error> { let value = try_ready!(self.future.poll()); let f = self.f.take().expect("cannot poll Map twice"); Ok(Async::Ready(f(value))) } } ``` ### `and_then` `and_then`組合器允許我們將兩個異步操作連接起來。在第一個操作完成時,其值將被傳遞到一個函數中。該函數會使用該值創建一個新的 future 并使其運行。 `and_then`和`map`的區別是`and_then`的函數返回一個 future,而`map`的函數返回一個值。 ``` extern crate tokio; extern crate bytes; extern crate futures; use tokio::io; use tokio::net::TcpStream; use futures::Future; fn main() { let addr = "127.0.0.1:7878".parse().unwrap(); let connection = TcpStream::connect(&addr).and_then(|socket|{ io::write_all(socket, b"hello world"); }).map(|_| println!("write complete")) .map_err(|err| println!("failed")); } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看