2012-02-04 22 views
1

我有,我想这样做的函数:这是怎么试着最终阻止工作?

def someThing():Int = { 
val thingy:Thing = new Thing() 
try{ 
    thingy.getIntThingy() 
}finally{ 
    thingy.cleanUp() 
} 
} 

getIntThingy()返回一个int。 thingy中有临时表,这些临时表是在初始化时创建的,需要清理(副作用)。此代码是否可以工作,还是应该重构?

+0

你的代码是不清楚。您不会返回'thingy',因此GC在离开方法后将其删除=>不需要清理。 – sschaef 2012-02-04 22:13:09

+0

对我来说没问题。它是否必须处于试验阶段?如果没有,您可以将返回值存储在局部变量中,然后在最后一行返回Int之前进行清理。 – 2012-02-04 23:16:25

+0

是什么让你认为你想让它做什么这个代码不呢?你有任何测试?如果你这样做,哪个测试失败?如果你没有测试,你不能重构(根据定义,在没有测试的情况下修改代码不是重构)。 – 2012-02-04 23:56:53

回答

4

那么,你需要得到来自try块的价值,但它的作品。例如:

scala> val x = try { 1 } finally { println("yay") } 
yay 
x: Int = 1