1. Куча / Говнокод #14210

    +128

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    object Point2D {
    
      type Point2D = Object {def apply(method: Method): method.type#signature}
    
      trait Method {
        type signature
      }
    
      object ToString extends Method {
        override type signature = () => String
      }
    
      object GetX extends Method {
        override type signature = () => Int
      }
    
      object SetX extends Method {
        override type signature = (Int) => Point2D
      }
    
      def Point2D(x: Int, y: Int): Point2D = {
    
        class Dispatch {
    
          def apply(method: Method): method.signature = (method match {
            case ToString => () => s"($x, $y)"
            case GetX => () => x
            case SetX => (x: Int) => Point2D(x, y)
          }).asInstanceOf[method.signature]
    
        }
    
        new Dispatch
      }
    
    }

    Запостил: LispGovno, 10 Декабря 2013

    Комментарии (26) RSS

    • Что тут творится?
      Ответить
      • Идея такая же, как у funcallable object (можно сделать в Лиспе / Питоне). Т.е. обявляется класс в котором есть поля, которые выполняют роль методов, но содержат в себе ссылки на экземпляры объектов унаследованых от funcallable объекта.
        Не знаю зачем это было писать (т.как в этом контексте никакого практического применения этому нет). Но, возможно, это пример того как можно через жопу задать тип наперед, исходя из того, какие именно поля будут в классе.
        Ответить
        • > через жопу задать тип наперед
          Чувак спрашивал как это написать на крестах. Этот факт многое объясняет.

          А ещё сказал что это популярный паттерн dependend method types.
          Ответить
          • Ну тут как бы самое катастрофическое последствие, которое может случиться, это если унаследоваться от этого класса и переопределить то, что делает конструктор так, чтобы типы методов не совпадали с унаследованными, т.е. например, SetX станет (Int) => Int вместо (Int) => Point2D. Зачем такое может понадобиться - хз, ну и соответственно, не понятно зачем такое куда-то переносить (скорее всего автору этот поворот событий совсем не нужен).
            Ответить
    • class X {
        // Prefix to call
        def m(x: Int) = X.f(x)
      
        // Import and use
        import X._
        def n(x: Int) = f(x)
      }
      
      object X {
        def f(x: Int) = x * x
      }
      Почему скала позволяет обращаться к ещё не объявленному объекту, почему позволяет чтобы имя класса совпадало с именем объекта и зачем так вообще делать?
      Ответить
      • class MyString(val jString:String) {
          private var extraData = ""
          override def toString = jString+extraData
        }
        
        object MyString {
          def apply(base:String, extras:String) =
        {
            val s = new MyString(base)
            s.extraData = extras
            s
          }
          def apply(base:String) = new MyString(base)
        }
        
        println(MyString("hello"," world"))
        println(MyString("hello"))
        В общем парни я разобрался.
        Классы скалы не умеют в статические методы, поэтому вставили костыль: приходится заводить объект спутник класса (компаньон), который как-будто бы умеет (вместо имени класса подставляется объект-спутник).

        А ещё скала не умеет в несколько конструкторов, поэтому опять вставили костыль в виде объекта-компаньона.

        Обожаю продуманные с рождения языки.
        Ответить
    • это какой язык?
      Ответить
      • Scala?
        Ответить
        • >Scala?
          はい
          Ответить
          • Лишп?
            Ответить
            • いいえ
              Ответить
              • > はい
                > いいえ
                Уроки японского на говнокоде?
                Ответить
                • Are you wait JapanGovno?
                  Ответить
                  • Зарегай себе домен govno.ru и сабдоменов под все-все-все, чтобы завести там кучу бложиков ;)

                    P.S. Блин, киберсквоттеры жгут - скупили домены govno.ru, govno.com, и govno.net.
                    Ответить
                    • govno.optom
                      Ответить
                      • <meta name="keywords" content="говно, купить говно, заказать говно,
                        свежее говно, несвежее говно, элитные сорта говна, говно оптом, самовывоз,
                        доставка на дом, производителям говна, обмазаться говном, говнокод">
                        Ответить
                        • navoscode.ru
                          Ответить
                          • Завтра зайдем в гугл и посмотрим насколько сильно моё SEO :) Будет ли гуглиться ГК по фразе "элитные сорта говна"? :)
                            Ответить
                            • Завтра - это рано. Ну и напиши нам отчет. Моё SEO сильнее твоего.
                              Ответить

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