Похоже, вы строите односвязный список значений Foo
;новые значения добавляются в конец списка, если знак нового значения отличается от существующего значения.
При функциональном подходе управление списком не будет встроено в объект в списке,Вместо этого вы должны поддерживать список отдельно var next: List[Foo]
и выполнять добавление следующим образом:
if ( next.all( _ * y <= 0) )
returnLambda("Bad")
else {
returnLambda("Good")
next = next :+ Foo(y)
}
Поскольку мы упростили манипулирование списком, использование CPS теряет свою выгоду;Вы можете просто вернуть строку «Хорошо» или «Плохо».
Если вы действительно, действительно нуждаетесь в CPS, вы можете удалить поле next
, переместив его в сопутствующий объект:
object Foo {
val listOfFoo: ListBuffer[Foo] = ListBuffer[Foo].empty
def bar(y: Double, returnLambda: (String => Unit)): Unit =
if ( listOfFoo.all(_ * y <= 0) )
returnLambda("Bad")
else {
listOfFoo += Foo(y)
returnLambda("Good")
}
}