4

scala プロジェクトに Java 線形代数ライブラリ (ojalgo 32.0) を使用していますが、奇妙な問題に遭遇しました。私が使用したすべての ojalgo メソッド (たとえば、行列および要素ごとの乗算、逆行列、およびランダム行列の生成) は、行列の次元を取得するための 2 つの一見単純なものを除いて、正常に機能します。これまで Java ライブラリの呼び出しで問題が発生したことはありません。何が起こっているのか非常に興味があります。以下は、正常に動作する Java のコード例です。

public static void main(String[] arg) {
  MatrixFactory tmpFactory = PrimitiveMatrix.FACTORY;
  BasicMatrix wMat = tmpFactory.makeRandom(5,5,new Weibull(5.0, 2.0));
  System.out.println(wMat.getColDim());
}

scala への単純な変換 (バージョン 2.9.2 を使用):

object DataGen {
  def main(args:Array[String]):Unit = {
  val tmpFactory = PrimitiveMatrix.FACTORY
  val wMat = tmpFactory.makeRandom(5,5,new Weibull(5.0, 2.0))
  println(wMat.getColDim)
}

scala コードはこれをスローします:

Exception in thread "main" java.lang.IllegalAccessError: tried to
access class org.ojalgo.access.Structure2D from class DataGen$
   at DataGen$.main(DataGen.scala:11)
   at DataGen.main(DataGen.scala)

11号線は

println(wMat.getColDim).

このエラーの他のケースを検索すると、scala のアクセス エラーに関する既知の問題がいくつかあることがわかりますが、問題の原因や最もクリーンな回避策が何であるかはまだわかりません。

4

2 に答える 2

1

Scala2.10-M3とojalgo32.4でテストしたところ、コードは期待どおりに機能するため、以前のバージョンのscalacのバグのように見えます(2.9でコンパイルすると2.10ランタイムでエラーが発生しますが、2.10でコンパイルしても2.9ランタイムでエラーが発生しました)。

これは簡単な回避策を示唆しています-Scalaバージョンをアップグレードしてください!

于 2012-05-23T21:30:46.520 に答える