introduced a constant
Mar. 10th, 2014 10:56 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
(fixed)
Turned out, have tons of it everywhere. Weird actually.
And no, I'm not saying it's good. I'm just seeing a pattern that worries me a little bit, but I don't know why.
E.g.
type Outcome = Result[Any]
val OK:Outcome = Good("OK")
Turned out, have tons of it everywhere. Weird actually.
And no, I'm not saying it's good. I'm just seeing a pattern that worries me a little bit, but I don't know why.
E.g.
def executeJS(js: String): Result[Unit] = runJS(js) map asScala filter ("OK"==, wrong => s"Wrong response from browser: <<$wrong>>")
no subject
Date: 2014-03-10 06:04 pm (UTC)no subject
Date: 2014-03-10 07:32 pm (UTC)no subject
Date: 2014-03-10 08:23 pm (UTC)no subject
Date: 2014-03-10 08:18 pm (UTC)no subject
Date: 2014-03-10 08:29 pm (UTC)no subject
Date: 2014-03-10 08:37 pm (UTC)Вообще, я с некоторого момента перестал сильно заморачиваться с типами для констант, и начал просто пихать везде строковые литералы, даже не Symbol. Безобразие, конечно. Но Скала в целом какой-то немного кривоватый язык, мне кажется, располагает к вольностям иногда.
no subject
Date: 2014-03-10 08:45 pm (UTC)Есть два варианта - один - Good(content), другой - "всё хорошо"; я бы написал Good[Unit]... да впрочем, вот и ответ, наверное.
no subject
Date: 2014-03-11 01:10 pm (UTC)Была у меня сходная задача - импорт данных из экселевских таблиц. Каждое чтение оформлялось в виде таких требований:
p2type = row.known("Type", alltypes)
content = row.nonempty("Content")
...
Всё это сидело в замыканиях, а над замыканиями хитрый map. В случае невозможности выполнить требование автоматически создавалось человекочитаемое сообщение об ошибке, с координатами листа, (опционально) ряда и (опционально) столбца. И бросалось в виде исключения. Хитрый map исключения ловил, текст ошибки в окно репорта направлял, а также принимал решение в зависимости от координат ошибки - продолжить импорт со следующего ряда, со следующего листа, или вообще остановить процесс импорта.
Так обработка всех видов Bad ушла из юзерского кода в требования и контекст обхода.