如何在scala中将类作为函数参数传递?

时间:2017-03-24 11:04:27

标签: scala

问题如下:

有一个具有这种功能的模块

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中使用。

如果有任何帮助解决我的困惑,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

  

如何在scala中将类作为函数参数传递?

你不能。您只能将对象作为参数传递。类不是对象,类是类型

可以使用反射来获取表示类型的代理对象,并将其作为参数传递。

  

但我无法通过MyClass对象[...]

这是因为MyClass 不是一个对象,它是一个。您不能将类或任何其他类型作为参数传递,只能传递对象。

  

到模块函数testExceptions

请注意,testExceptions被定义为采用类型为MyClass值的参数, 不采用{{1}本身作为一个论点。您需要实例化MyClass的对象并将 作为参数传递。