在Java或C++編程時,有很多次我已經遇到了一個簡單的模式,其中自定義控件結構可以減少我的代碼中的樣板文件。它類似於:斯卡拉的自定義控制結構?
if(Predicate){
Action
return Value
}
即,「返回if」類型語句。我嘗試過使用像foo[A,B](pred:((A,A)=>Boolean), value:Option[B])
這樣的簽名來做功能,但後來我檢查了是否返回了Some或None。我被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,但必須由編譯器開關激活),但我對此不夠了解。 – Landei 2010-08-26 20:49:45