1. Java / Говнокод #27574

    0

    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
    package test.sandbox
    
    object Main {
      def foo(implicit a: Int): Int = a * 2
    
      def main(args: Array[String]): Unit = {
        {
          import Test._
          val result = foo
    
          println(s"Result1 = $result") // Result1 = 42
        }
        {
          implicit val x = 16
          println(s"Result2 = $foo")  // Result2 = 32
        }
      }
    }
    
    object Test {
      implicit val x: Int = 21
    }

    "Scala" — сахарная. (*^‿^*)

    Запостил: PolinaAksenova, 16 Августа 2021

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

    • П.р.-С., сделай раздел "Scala"!
      Ответить
    • Чего это тебя в наскальную живопись потянуло?
      Ответить
    • > "Scala" — сахарная.

      И Полиночка тоже сахарная, но не ``Scala'', а няшка! UwU
      Ответить
    • Ну и мерзость же. Вообще не очевидно.

      Реально по каким правилам оно выводит? Почему аргумент называется «а» (implicit a: Int), а вяжет оно с «x»?

      Ну да, чтобы программу невозможно было прочитать и разобраться — самое оно.
      Чтобы она компилировалось вечность — наилучший вариант.
      Ответить
      • > Почему аргумент называется «а» (implicit a: Int), а вяжет оно с «x»?

        Других переменных рядом не оказалось.

        По маркеру implicit на этой переменной, вестимо. Походу можно одну из переменных в скопе так пометить и она будет юзаться для функций с implicit аргументом. Пиздецовая фича, конечно.
        Ответить
        • Слава богу в «Nim» такого нет.
          Ответить
          • А вот были бы там гомоиконы -- можно было бы сделать!
            Ответить
        • > По маркеру implicit на этой переменной, вестимо.

          А там походу и тип может неявно конвертироваться?

          implicit переменная может превращаться implicit функцией в какую-то подходящую для foo хрюкню.
          Ответить
          • > А там походу и тип может неявно конвертироваться?

            Нужно больше ёбаной магии!

            З.Ы. Откуда я знаю, я же не скалолазка, выше просто моя гипотеза написана.
            Ответить
            • Implicit conversions in Scala are the set of methods that are apply when an object of wrong type is used. It allows the compiler to automatically convert of one type to another.
              
              Implicit conversions are applied in two conditions:
              
                  First, if an expression of type A and S does not match to the expected expression type B.
                  Second, in a selection e.m of expression e of type A, if the selector m does not represent a member of A.
              
              In the first condition, a conversion is searched which is appropriate to the expression and whose result type matches to B.
              In the second condition, a conversion is searched which appropriate to the expression and whose result carries a member named m.


              https://www.geeksforgeeks.org/implicit-conversions-in-scala/
              Ну и чем это лучше йажасцрипта?

              Там хоть эти дибильные правила забиты на уровне стандарта.
              А тут ещё и динамически меняются в зависимости от импорта разной хрюкни.
              Ответить
    • Небольшой поиск не прояснил механизма связывания.

      Зато на SO нашёлся забавный говнопример, как можно легко и просто обосраться при рефакторинге или импорте:
      object HelloWorld {
        case class Text(content: String)
        case class Prefix(text: String)
      
        implicit def String2Text(content: String)(implicit prefix: Prefix) = {
          Text(prefix.text + " " + content)
        }
      
        def printText(text: Text): Unit = {
          println(text.content)
        }
      
        def main(args: Array[String]): Unit = {
          printText("World!")
        }
      
        // Best to hide this line somewhere below a pile of completely unrelated code.
        // Better yet, import its package from another distant place.
        implicit val prefixLOL = Prefix("Hello")
      }

      После этой срани даже C++ выглядит просто и понятно.
      Ответить
    • Мы забрызгивали Натку спермой с головы до ног! Буквально! Сперма была у нее на лице, на животе, на ногах, на волосах…
      Ответить
    • Потом парень заканчивал, снимал презик, бросал его на пол, а эта самка ожидала следующего героя. Иногда за вечер через Наткину вагину «проходило» до двух десятков парней!
      Ответить

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