【发布时间】:2019-01-15 16:55:03
【问题描述】:
是否可以在 scala 的子类中设置一个在方法中具有作用域的变量?
为什么我需要在下面的代码 sn-p 中解释:
abstract class SuperTask {
def doWork():Unit = {
var taskData:Option[TaskData] = None
try {
_actualWork()
}
catch {
// catch exception and do reporting using taskData variable
}
}
protected def _actualWork(): Unit
}
class FunTask extends SuperTask {
override def _actualWork(): Unit = {
//This will have data for taskData
//PROBLEM is how to set taskData of parent class from here so that if this throws exception, I can do reporting from catch in doWork method.
}
}
我想设置taskData 变量的值,这样如果_actualWork 失败,我可以进行适当的报告、重试等,这对于SuperTask 类的所有子类都是通用的。
我无法在SuperTask 类级别定义taskData 变量,因为它将被共享并在并发的情况下失败。
【问题讨论】:
-
我不确定我是否理解正确,但是您可以更改
_actualWork()函数的签名并将myObject传递给它。比如:`try {_actualWork(myObject) } catch {}` -
@dyrkin 不,这是不可能的:stackoverflow.com/q/9535821/1610034
-
那么,您要从
_actualWork为taskData分配新值吗? -
@dyrkin 是的,我想设置
taskData变量,这样如果_actualWork失败,我可以进行适当的报告、重试等,这对于SuperTask的所有子类都是通用的. -
这种听起来像XY problem。您能否详细说明您想要实现的目标?
标签: scala