问题如下:
有一个具有这种功能的模块
def testExceptions(toTest: MyClass): Unit = {
val isException = try {
toTest.increaseValue(-200);
false
} catch {
case e: Exception => true
}
if (isException) {
// some actions
} else {
// another actions
}
}
此功能正在导入定义MyClass
的文件中。它有这样的观点
class MyClass(var value: Int) {
def show(): Unit = {
println(s"Value: $value")
}
def increaseValue(dv:Int): Unit = {
if(dv <= 0) { throw new IllegalArgumentException }
else { value += dv }
}
}
但是我无法将MyClass
对象传递给模块函数testExceptions
,因为它在存在此函数的文件中未定义。如果我在此文件中定义MyClass,它将在testExceptions
中使用。
如果有任何帮助解决我的困惑,我将不胜感激。
答案 0 :(得分:3)
如何在scala中将类作为函数参数传递?
你不能。您只能将对象作为参数传递。类不是对象,类是类型。
你可以使用反射来获取表示类型的代理对象,并将其作为参数传递。
但我无法通过
MyClass
对象[...]
这是因为MyClass
不是一个对象,它是一个类。您不能将类或任何其他类型作为参数传递,只能传递对象。
到模块函数
testExceptions
请注意,testExceptions
被定义为采用类型为MyClass
的值的参数, 不采用{{1}本身作为一个论点。您需要实例化MyClass
的对象并将 作为参数传递。