Как я могу изменить направление потока Option Monad?

скажем, у меня есть несколько функций "проверки", которые возвращают None, если ошибки нет, в противном случае возвращается Some (String) с указанием сообщения об ошибке. Что-то вроде следующего ...

def validate1:Option[String] 
def validate2:Option[String]
def validate3:Option[String]

Я буду вызывать их в последовательности, и как только кто-то вернет Some (String), я остановлюсь и верну то же самое. Если он возвращает None, я перехожу к следующему, пока последовательность не закончится. Если все они возвращают None, я возвращаю None.

Я хотел бы склеить их вместе в выражении «for». Что-то вроде ...

for( a <- validate1; b <- validate2; c <- validate3) yield None;

Однако Option работает прямо противоположно тому, что я хочу здесь. Он останавливается на None и следует за Some (String).

Как я могу достичь чего-то подобного?

8
задан giampaolo 13 February 2014 в 20:53
поделиться