JavaまたはC++でプログラミングするときに、カスタム制御構造によってコード内の定型文を減らすことができる単純なパターンに遭遇することが何度もあります。それは次のようになります:
if( Predicate ){
Action
return Value
}
つまり、「returnif」タイプのステートメントです。のような署名付きの関数を作成しようとしまし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
。