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