<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 柯里化和部分求值 [柯里化](https://en.wikipedia.org/wiki/Currying)(Currying)的名稱來自于其發明者之一 *Haskell Curry*。他可能是計算機領域唯一姓氏和名字都命名過重要概念的人(另外就是 Haskell 編程語言)。 柯里化意為:將一個多參數的函數,轉換為一系列單參數函數。 ```java // functional/CurryingAndPartials.java import java.util.function.*; public class CurryingAndPartials { // 未柯里化: static String uncurried(String a, String b) { return a + b; } public static void main(String[] args) { // 柯里化的函數: Function<String, Function<String, String>> sum = a -> b -> a + b; // [1] System.out.println(uncurried("Hi ", "Ho")); Function<String, String> hi = sum.apply("Hi "); // [2] System.out.println(hi.apply("Ho")); // 部分應用: Function<String, String> sumHi = sum.apply("Hup "); System.out.println(sumHi.apply("Ho")); System.out.println(sumHi.apply("Hey")); } } ``` 輸出結果: ``` Hi Ho Hi Ho Hup Ho Hup Hey ``` **[1]** 這一連串的箭頭很巧妙。*注意*,在函數接口聲明中,第二個參數是另一個函數。 **[2]** 柯里化的目的是能夠通過提供一個參數來創建一個新函數,所以現在有了一個“帶參函數”和剩下的 “自由函數”(free argumnet) 。實際上,你從一個雙參數函數開始,最后得到一個單參數函數。 我們可以通過添加級別來柯里化一個三參數函數: ```java // functional/Curry3Args.java import java.util.function.*; public class Curry3Args { public static void main(String[] args) { Function<String, Function<String, Function<String, String>>> sum = a -> b -> c -> a + b + c; Function<String, Function<String, String>> hi = sum.apply("Hi "); Function<String, String> ho = hi.apply("Ho "); System.out.println(ho.apply("Hup")); } } ``` 輸出結果: ``` Hi Ho Hup ``` 對于每個級別的箭頭級聯(Arrow-cascading),你都要在類型聲明中包裹另一層 **Function**。 處理基本類型和裝箱時,請使用適當的函數式接口: ```java // functional/CurriedIntAdd.java import java.util.function.*; public class CurriedIntAdd { public static void main(String[] args) { IntFunction<IntUnaryOperator> curriedIntAdd = a -> b -> a + b; IntUnaryOperator add4 = curriedIntAdd.apply(4); System.out.println(add4.applyAsInt(5)); } } ``` 輸出結果: ``` 9 ``` 可以在互聯網上找到更多的柯里化示例。通常它們是用 Java 之外的語言實現的,但如果理解了柯里化的基本概念,你可以很輕松地用 Java 實現它們。
                  <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>

                              哎呀哎呀视频在线观看