Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2011-11-30 12:09:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Вова Патрышев рекламирует Скалу - за паттерн-матчинг:
Вот тут:

В Скале же, на самом деле, не особ9о стесняются расписывать по классам, но на то есть другая причина: unapply, а ещё лучше сказать, линза (обратная сторона); с помощью её можно устраивать сравнение по образцу и, в зависимости от типа, выполнять какие-то действия с параметрами конструктора.
  message match {
    case CancelMessage(timeout: TimeInSeconds) => app.cancelato(timeout)
    case EncourageMessage(text: String) => galera.listen(text); galera.trabalha
    ...
  }


Тогда как в 45-летней давности в первом в истории ОО-языке это писалось так:
Current :- First;
While Current ne None do begin
  Inspect Current
    When A do Show    ! Show of A;
    When B do Show    ! Show of B;
    When C do Show    ! Show of C;
    Otherwise OutText("Not a (sub)class of A");
  OutImage;
  Current :- Current.Link
End While;


(Добавить комментарий)


[info]ifp5
2011-11-30 16:43 (ссылка)
Симулы я не знаю и это, наверное, очень стыдно, можно продемострировать как в ней выглядит unapply (в котором в данном случае вся соль)?

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2011-11-30 16:46 (ссылка)
unapply - это который view в большинстве езыков - да никак не выглядит (идея была опробована и оказалась кривой). Идея же "поимщения в локальный контекст" вот она как есть)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ifp5
2011-11-30 17:15 (ссылка)
А почему это она оказалось кривой? По-моему, unapply это прямой и естественный способ внедрить в scala pattern matching в стиле ML. Если придерживаться ограничения, что любой scala-объект можно как угодно использовать из java, то какие варианты прямее? Или, может быть, pattern matching тоже кривой? :)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2011-12-01 14:56 (ссылка)
Ну потом что у view есть проблемы с семантикой. Скажем в haxe АТД просто мимикрировали под enum

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ifp5
2011-12-02 17:15 (ссылка)
Какие именно проблемы? Мне так сходу припоминаются проблемы с view constructors, но в scala их как раз нет.

(Ответить) (Уровень выше)


[info]ketmar
2011-12-01 08:23 (ссылка)
>в первом в истории ОО-языке
чота это не похоже на Smalltalk.

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2011-12-01 14:54 (ссылка)
Потому что это Simula-67 (кою в более поздних традициях следовало бы назвать Object Algol-60)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ketmar
2011-12-01 16:46 (ссылка)
пардон, но это первый объектный костыль. а первый объектный язык — это Smalltalk.

(Ответить) (Уровень выше)