【发布时间】:2011-04-04 07:08:06
【问题描述】:
在使用 Java 或 C++ 编程时,我曾多次遇到一个简单的模式,其中自定义控制结构可以减少我代码中的样板。它是这样的:
if( Predicate ){
Action
return Value
}
即“return if”类型的语句。我尝试过使用foo[A,B]( pred:((A,A)=>Boolean), value:Option[B] ) 之类的签名创建函数,但最后我检查我是否返回了一些或无。我被return 声明绊倒了。
在函数式语言或更具体地说是 Scala 中是否有一种继承方式来制作这种控制结构?
编辑:
我的描述不是很清楚,这让试图帮助我的人感到困惑。我的foo 不起作用的关键原因是它不能短路包含函数的评估。那是
def intersect( geometry:Geometry, reference:Geometry ):Geometry = {
return_if( withinBounds( geometry, projection ), logToString( logger, "Geometry outside " + projection.toString ), EmptyGeometry() )
return_if( topologicallyCorrect( geometry ), intersect( correct( geometry ), reference )
//rest of the function
}
并且仍然允许在 return_if 中进行尾递归。
【问题讨论】:
-
它可能可以通过延续以某种方式获得这种行为(CPS 是 2.8 的“内置”,但必须由编译器开关激活),但我没有对它了解不够。
标签: scala functional-programming control-structure