Re[8]: Kotlin - новый язык для JVM
От: mima  
Дата: 21.07.11 08:31
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>В Скале:

C>
C>//Есть класс:
C>class Tree {
C>   val left : Tree;
C>   val right : Tree;
C>}

C>//Хочешь PM по этому классу делать? А вот обломись!

C>//Нужно делать что-то типа:
C>implicit object TreeWrapper {
C>   def unapply(t : Tree) = {
C>      (t.left, t.right)
C>  }
C>}

C>//Теперь можно делать так:
C>val tr : Tree = ....;

C>match(tr) {
C>    case TreeWrapper(t) => Console.print(t._1, t._2);
C>}
C>//Если хотим вместо неименованых параметров _1, _2 
C>//использовать left и right - то нужно делать отдельный case-class
C>


Это на каком языке код? В Scala
class Test {
    class Tree(val left : Tree, val right : Tree)

    implicit object TreeWrapper {
        def unapply(t : Tree) = Some(t.left, t.right)
    }

    def main(args: Array[String]) {
        val tr : Tree = null;

        tr match {
            case TreeWrapper(t1, t2) => println(t1, t2);
        }
    }
}

прекрасно работает.

C>Стоит ли говорить, что после этого использование PM при работе с legacy-кодом превращается в ужас?


Ну ужас. Но не ужас-ужас-ужас. Ведь есть RichXXX, плюс, как видно экстракторы лишь на строчку длинее декомпозера.

C>>>Управляющие конструкции (в Kotline есть нелокальный return),

VD>>Чё? Это ты о инлайн-функциях что ли? Можно пример?
C>Ага. http://confluence.jetbrains.net/display/Kotlin/Nonlocal+returns+and+jumps (раздел "Break and continue is custom control structures") — в Скале такое не получается.

Отчего же? Есть scala.util.control.Break

C>Не, ну про implicit так же говорили. А получился ужастик в итоге.


Есть такое.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.