【发布时间】:2017-02-19 23:59:30
【问题描述】:
我在使用 Scala 时遇到问题,并将一个双向量从 MATLAB 传递给我的 Scala 类。
假设我们有一个这种形式的 Scala 类:
class MyClass {
def myMethod(x: Seq[Double]): Double = {
val methodValue = for(i <- x.indices) yield { math.pow( x(i),2.0) }
methodValue.sum
}
}
我以前编译过这个,匹配我的 Matlab 和 JRE 的 java 版本,以及需要什么
.
我测试了 Seq[Double]、Array[Double] 和 Vector[Double],但没有任何进展
.
现在我想在 MATLAB 中调用这个类并给它一个所需的行向量并得到它的平方和值。
为此,我在 Matlab 中编写了这个 mfile:
clc, clear, close all
javaaddpath(pwd)
javaaddpath('C:\Program Files\scala\lib\scala-library.jar')
javaclasspath('-dynamic')
newInstanceOfClass = MyClass
newInstanceOfClass.myMethod([1 2 3 4])
但我收到一条错误消息:
找不到具有匹配签名的方法“myMethod” 类'MyClass'。
我不知道如何将一个简单的向量传递给这个 Scala 类。有人可以帮我解决这个问题吗?
我也试过用 Matlab 的 javaArray 来解决这个问题,但还是不行
【问题讨论】:
-
只是想知道:您确定 Matlab 支持调用 Scala 方法/类吗?
-
您可能想尝试将 MyClass 更改为对象。我没有理由认为 myMethod 是一个实例方法(它基本上需要两个参数:this 和 Seq[Double])。
-
是的,我很确定 MATLAB 会运行 Scala 类。我成功地运行了一个没有输入参数的简单“Hello World”类。我的问题只是将输入向量传递给我的类,这会产生签名不匹配错误。
-
@Phasmid:将类更改为对象无助于解决主要问题。它只会改变您最初从 Matlab 调用该对象或类的方式。其余的工作是一样的。我们仍然需要传递一个向量,即使在对象形式中我们也会得到一个签名不匹配错误。 (这两种形式我都测试过了)
-
您是否尝试过将 x 声明为 Any,然后打印 x 的类?这应该可以帮助您弄清楚 Matlab 传入的对象类型。