在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Scala/ 從 Java 中調(diào)用 Scala 函數(shù)
表達(dá)式計(jì)算(三)
表達(dá)式計(jì)算(一)
List 簡(jiǎn)介
完整的代碼和計(jì)算結(jié)果
更簡(jiǎn)單的表達(dá)式算法
算法之一
表達(dá)式計(jì)算(二)
計(jì)算 24 的算法
窮舉可能的表達(dá)式
實(shí)現(xiàn)全排列
從 Java 中調(diào)用 Scala 函數(shù)

從 Java 中調(diào)用 Scala 函數(shù)

我們對(duì)前面定義的計(jì)算 24 的代碼,稍作修改,可以在 Java 中調(diào)用,在通常情況下在 Java 中調(diào)用 Scala 函數(shù)非常簡(jiǎn)單,反之從 Scala 中調(diào)用 Java 代碼也很簡(jiǎn)單,這是因?yàn)?Scala 代碼最終也要編譯成 Java class 文件。以后我們將詳細(xì)介紹 Java 和 Scala 之間的互操作的用法,這里簡(jiǎn)要介紹下如何在 Java 代碼中調(diào)用之前我們定義的計(jì)算 24 的算法。

在 Scala 二十四點(diǎn)游戲(9): 完整的代碼和計(jì)算結(jié)果我們給出了完整的代碼,其中的 Test 由 App 派生,如果我們希望把 Test 定義的一些方法如 cal24,cal24once 作為庫(kù)函數(shù)調(diào)用,我們無(wú)需讓 Test 由 App 派生,另外我們?cè)俣x cal24once 的一個(gè)重載版本:

object Cal24 {

   ...
   def cal24once(a:Int,b:Int,c:Int,d:Int) {
   cal24once(List(a,b,c,d))
  }

  def hello {
    println("Hello from Scala")
  }

}

我們把這段代碼存成 Cal24.scala. 下面我們使用 scalac 對(duì)它進(jìn)行編譯:

scalac Cal24.scala

然后我們列出有 scalac 編譯后生成的 class 文件:

Add.class                                          Cal24.class
Add$.class                                         Cal24$.class
BinaryOp.class                                     Cal24.scala
BinaryOp$class.class                               Divide.class
Bracket$$anonfun$matchBracket$1.class              Divide$.class
Bracket$$anonfun$matchBracket$2.class              Multiply.class
Bracket.class                                      Multiply$.class
Bracket$.class                                     Rational.class
Cal24$$anonfun$cal24$1$$anonfun$apply$1.class      Rational$.class
Cal24$$anonfun$cal24$1.class                       Subtract.class
Cal24$$anonfun$cal24once$1$$anonfun$apply$2.class  Subtract$.class
Cal24$$anonfun$cal24once$1$$anonfun$apply$3.class  
Cal24$$anonfun$cal24once$1.class                   
Cal24$$anonfun$calculate$1.class

其中 Cal24 定義了我們所需的庫(kù)函數(shù),我們可以使用 javap 看看它對(duì)應(yīng)的 java 類定義:

root@ubuntu:/sdb/Scala/Cal24# javap Cal24
Compiled from "Cal24.scala"
public final class Cal24 {
  public static void hello();
  public static void cal24once(int, int, int, int);
  public static void cal24once(scala.collection.immutable.List<java.lang.Object>);
  public static void cal24(scala.collection.immutable.List<java.lang.Object>);
  public static scala.Tuple3<java.lang.String, java.lang.String, Rational> calculate(java.lang.String, scala.collection.immutable.List<java.lang.Object>);
  public static Rational eval(java.lang.String);
  public static scala.collection.immutable.List<java.lang.String> templates();
}

可以看到 Scala 的 object (singleton對(duì)象)對(duì)應(yīng)到 Java 的 public final class, Cal24 的函數(shù)為 static

然后我們定義一個(gè) TestCal24.java

public class TestCal24{
    public static void main(String[] args) {
        Cal24.cal24once(5,2,3,4);
    }
}

然后我們使用 javac 來(lái)編譯 TestCal24.java ,此時(shí)我們需要指明 scala 庫(kù)的位置

javac -cp $SCALA_HOME/lib/scala-library.jar:. TestCal24.java

-cp (class path) 指明 Scala 類定義的路徑

然后運(yùn)行編譯后的TestCal24 代碼:

root@ubuntu:/sdb/Scala/Cal24# java -cp $SCALA_HOME/lib/scala-library.jar:. TestCal24
List(5, 2, 3, 4):(N-(N-N))*N:(5-(2-3))*4

調(diào)用成功,這樣你可以在 Java 應(yīng)用(包括 Android 應(yīng)用中使用 Scala 的函數(shù)庫(kù))