1

そのため、scala でパッケージをインポートするのに問題があります。確率分布からサンプリングしたかったので、 パッケージ Breeze を github からダウンロードしました

Python では、パッケージをダウンロードしてパスに含め、コードにインポートするだけで済みます。したがって、別の「ビルドツール」を使用してサードパーティのパッケージを使用するという考えには、私は非常に慣れていません。

そこで、github から「breeze」ソース コードをダウンロードし、sbt をインストールしてから、breeze のソース コード内で sbt を実行し、「assembly」コマンドを使用して、breeze の .jar を取得しました。

scala インタープリターを使用したい場合は、パッケージを問題なくインポートできます。

   scala -cp breeze-master/target/scala-2.11/breeze-parent-assembly-0.8.jar

問題は、Chromosome.scala というファイルに記述している別のコードでこのパッケージを使用したいということです。パッケージをインポートしようとすると (以下を参照)、エラーが発生します。

    error: not found: object breeze

これが私のコードです:

// Chromosome.scala

import breeze.stats.distributions._

class Chromosome(s:Int, bitstring:Array[Boolean]) {
  val size:Int = s;
  val dna:Array[Boolean] = bitstring;
  var fitness:Int = 0;

  def mutate(prob:Float):Unit = {
    // This method will randomly "mutate" the dna sequence by flipping a bit.
    // Any individual bit may be flipped with probability 'pm', usually small.

    val pm:Float = prob;

    // The variable bern is an instance of a Bernoulli random variable,
    // whose probability parameter is equal to 'pm'.
    var bern = new Bernoulli(pm);

    //Loop through the 'dna' array and flip each bit with probability pm.
    for (i <- 0 to (size - 1)) {
      var flip = bern.draw();
      if (flip) {
        dna(i) = !(dna(i));
      }
    }
  }
4

2 に答える 2

1

「台本?」これは何ですか?SBT プロジェクトとの関係は何ですか? Scala スクリプトには、Scala インタープリター/コンパイラー (/REPL…) 用の独自の起動コマンドが含まれています。標準ライブラリ以外のものにアクセスしたい場合は、それらをそこに含める必要があります。または、 SBT Start Script プラグインを使用して、プロジェクトの依存関係を含むランチャー スクリプトを作成することもできます。ローカルでのみ動作しますが、テキスト処理やその他のシェル スクリプトを記述して、移植可能な起動バンドルを作成できます。

于 2014-05-27T00:08:32.670 に答える
0

sbt が何をするべきかについて、理解できる混乱があるようです。

まず、通常、github からパッケージをダウンロードしてソースからビルドする必要はありません。ごくまれに (ライブラリのリリースに含まれていない機能が必要な場合など)、sbt は単調な作業を処理できます。

代わりに、ビルドしているプロジェクトについて (その依存関係を含めて) sbt に少し伝えると、sbt はそれらをダウンロードし、コードをコンパイルし、scala インタープリターのランタイム クラスパスをセットアップします (無数の他のビルド関連タスクの中で)。 )。

Breeze wiki の指示に従ってください。具体的にbuild.sbtは、プロジェクトのルート フォルダーにファイルを作成し、これをコピーします。

libraryDependencies  ++= Seq(
            // other dependencies here
            "org.scalanlp" % "breeze_2.10" % "0.7",
            // native libraries are not included by default. add this if you want them (as of 0.7)
            // native libraries greatly improve performance, but increase jar sizes.
            "org.scalanlp" % "breeze-natives_2.10" % "0.7",
)

resolvers ++= Seq(
            // other resolvers here
            // if you want to use snapshot builds (currently 0.8-SNAPSHOT), use this.
            "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/",
            "Sonatype Releases" at "https://oss.sonatype.org/content/repositories/releases/"
)

// Scala 2.9.2 is still supported for 0.2.1, but is dropped afterwards.
// Don't use an earlier version of 2.10, you will probably get weird compiler crashes.
scalaVersion := "2.10.3"

ソースを適切なフォルダー (デフォルトではsrc/main/scala) に入れて、 を実行しますsbt console。このコマンドは、依存関係をダウンロードし、コードをコンパイルして、Scala インタープリターを起動します。この時点で、クラスと対話できるはずです。

于 2014-05-27T16:53:56.657 に答える