У меня есть класс case Application
, который имеет несколько портов ввода, и каждый порт имеет имя. Затем у меня есть другой класс case, который присваивает значения портам приложения.Scala: строка за строкой проверяют на None или проверяете исключения в конце?
case class Port (id: ObjectId, name: String, PortType: String)
case class Application (id: ObjectId, ports: List[Port])
case class AppRun (appId: ObjectId, assignments: List[Assignment])
case class Assignment (portName: String, value: String, valueType: String)
У меня есть приложения и их порт информацию в базе данных, и я получаю в качестве входных данных AppRun
. Мне нужно составить список PortValue
типа (ниже) показывает значение, присвоенное каждый порт (и сопоставление выполняется по именам портов):
case class PortValue (portId: ObjectId, value: String)
Есть несколько вещей, которые могут быть неудачными в течение этого сопоставления: приложение id недействителен, порты не совпадают и т. д. Мне кажется естественным написать простой алгоритм, а затем поймать все исключения, но это похоже на Java-ish. С другой стороны, я не могу придумать аккуратный способ справиться с Option
, проверяя их один за другим, что приведет к запутыванию кода.
Вопрос в том, как бы вы решили этот способ Scala?
EDIT: Мне нужно отправить соответствующее сообщение назад, когда такое несоответствие происходит, как «Приложение не найдено», и т.д.
Посмотрите на 2-й и 3-й примеры: http://nerd.kelseyinnis.com/blog/2013/11/12/idiomatic -scala-for-assrehension/ – Kolmar
http://fsharpforfunandprofit.com/rop/ – al32
@Kolmar Спасибо. Фактически я сначала написал его с пониманием, и он был очень аккуратным и маленьким, но мне также нужно обрабатывать случаи ошибок и отправить правильное сообщение об ошибке. – Mahdi