При программировании на Java или C ++ я несколько раз сталкивался с простым шаблоном, для которого пользовательская структура управления могла уменьшить шаблон в моем коде.Это выглядит примерно так:
if( Predicate ){
Action
return Value
}
, то есть оператор типа return 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
.