1

以下のクラスはコンパイルされません。関数をクラスではなくオブジェクトとして宣言すると、Functions.fac(3) を使用してメソッド fac を実行できます。このようなクラスを実行しようとすることは、scala で意味がありますか? class ではなく object に変更せずに実行されるように、以下のコードを変更するにはどうすればよいですか?

class Functions {

  def fac(n : Int) = {
    var r = 1;
    for(i <- 1 to n) r = r * i;
    r
  }
     def main(args:Array[String]) = {
      Functions f = new Functions();

      print(f.fac(3));
  }

}
4

2 に答える 2

7

コードの最も明白な問題は、Functions f = .... これは Java 構文なので、Scala ではこう言う必要があります。val f: Functions = ...

第二に、Scala は静的なものと非静的なものを Java よりも大きく区別します。Scala では、静的なもの (mainメソッドなど) はオブジェクトで宣言されます。したがって、object(静的) パーツをパーツか​​ら分離する必要がありclassます。

第三に、あなたのfac関数はより簡単に のように書くことができます(1 to n).product

最後に、セミコロンは必要ありません。

class Functions {
  def fac(n: Int) =
    (1 to n).product
}

object Functions {
  def main(args: Array[String]) = {
    val f: Functions = new Functions()
    print(f.fac(3))
  }
}
于 2012-08-14T21:53:43.860 に答える
1

Java と Scala では、静的関数の実装が大きく異なります。Java では静的識別子を追加しますが、Scala ではオブジェクト コンパニオンにメソッドを配置します。

于 2012-08-14T21:56:32.940 に答える