我正在尝试编译扩展Java类的Scala类文件。这是类定义,它是基本的。在加载时,在宿主应用程序中,对象应使用超类的方法“post”将“Hello from Scala”写入主机的输出窗口。
import com.cycling74.max.MaxObject;
public class FirstClass extends MaxObject{
public FirstClass{
post("Hello From Java");
}
}
这在应用程序中编译并运行良好。
这是我对Scala的翻译(老实说,我并非100%确定我完全理解Scala中的构造函数):
import com.cycling74.max._
class FirstClass() extends MaxObject {
super.post("Hello from Scala")
}
但是,当我尝试使用scalac进行编译时,我收到以下错误:
dm$ scalac -cp max.jar FirstClass.scala
FirstClass.scala:3: error: value post is not a member of com.cycling74.max.MaxObject with ScalaObject
super.post("Hello from Scala")
^
one error found
我不确定为什么编译器告诉我'post'不是成员函数,我确定我已经破坏了Scala语法,但无法确定是什么问题。
谢谢!
修改
这是Max窗口的输出,除了按照下面的规定更改代码外,我只是将Scala库添加到Max的动态加载路径中。这很令人兴奋
MXJ System CLASSPATH:
/Applications/Max 6.1/Cycling '74/java/lib/jitter.jar
/Applications/Max 6.1/Cycling '74/java/lib/jode-1.1.2-pre-embedded.jar
/Applications/Max 6.1/Cycling '74/java/lib/max.jar
MXJClassloader CLASSPATH:
/Applications/Max 6.1/Cycling '74/java/classes/
/Users/dm/maxmsp/classes
/Users/dm/maxmsp/jars/jline.jar
/Users/dm/maxmsp/jars/scala-compiler.jar
/Users/dm/maxmsp/jars/scala-dbc.jar
/Users/dm/maxmsp/jars/scala-library.jar
/Users/dm/maxmsp/jars/scala-partest.jar
/Users/dm/maxmsp/jars/scala-swing.jar
/Users/dm/maxmsp/jars/scalacheck.jar
/Users/dm/maxmsp/jars/scalap.jar
Jitter initialized
Jitter Java support installed
Hello from Scala
答案 0 :(得分:1)
假设post
中MaxObject
方法的定义为..
public class MaxObject {
public static void post(java.lang.String message){
System.out.println("printing from MaxObject.post :: " + message);
}
}
您可以直接在scala中调用post
方法 -
class FirstClass extends MaxObject {
MaxObject.post("Hello from Scala")
}
事实上,如果您没有被迫扩展MaxObject
..您也可以将其用作..
class FirstClass{
MaxObject.post("Hello from Scala")
}
将其视为:
val fc = new FirstClass //> printing from MaxObject.post :: Hello from Scala