1. ActionScript / Говнокод #13858

    −113

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    public static function map( a:Array, pred:Function ):Array
    {
        return a.map(
            function( it:*, idx:*, a:* ):*
            {
                return pred(it)
            });
    }

    Вот такая полезная функция.

    Запостил: strax, 27 Сентября 2013

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

    • Узнаю так полюбившийся мне почерк!
      Ответить
    • глаза кровоточат
      Ответить
    • Девчачий код - кругом эти "чмоки чмоки"
      Ответить
      • В Каскеле если пользовать открытые типы тоже так можно.
        Ответить
        • Я без этого барахла могу чмоки в хаскеле сделать
          -- http://ideone.com/r7pKNX
          type Name = String
          data Kiss = Name :* Name deriving (Eq)
           
          instance Show Kiss where
            show (who :* whom) = who ++ " kiss " ++ whom
           
          main =
            mapM_ print [ "Kate" :* "Jim"
                        , "Julia" :* "Ivan"
                        , "Evgeny" :* "Anton"
                        ]
          Ответить
          • > "Evgeny" :* "Anton"
            Толерантность к меньшинствам?
            Ответить
            • Это мой косяк, тут должна была быть "Женя". И вообще, хаскель же UTF понимает, можно было не ограничивать имена англоязычными...
              Ответить
          • Ну так это самому определять, а там говотое уже.
            + оно для настоящих ботанов - с четырьмя глазами.
            Ответить
          • Упс. борманд уже первый заметил.
            Ответить
    • Ну задумка-то нормальная, реализация плохая... Хотя, есть надежда на (более)оптимизирующий компилятор в будущем, который сможет это нормально обработать, тогда вообще хорошо будет...
      Проблема "родных" методов массива в том, что они не компонуются никак, а без компоновки их использование видится бессмысленным. Кроме того, найти в природе уже существующие функции с типом элемент->индекс->массив->элемент представляется маловероятным, а с типом элемент->элемент - вполне себе.
      Ответить
      • Можно было сделать метод с такой сигнатурой:
        map(element:*,...rest):*
        И не городить лишних статических методов.
        Ответить
        • Так тут весь смысл в том, чтобы сделать метод статическим. Инстанс методы такого плана не нужны. map с таким набором аргументов тоже как-то ни к чему. Смысл использование такого map'a:
          map([[1, 2], [3, 4]], curry(map, sum))

          Например, чтобы получить [3, 7]. curry возвращает оригинальную функцию с захваченным первым аргументом.
          Т.е. это нам позволило бы использовать map повторно (с оригинальной Array.map так не получится).
          Ответить
          • Исходя из примеров использования этого метода в проекте, он был сделан именно потому что автор не знал про ...rest =)
            Ответить
            • > автор не знал про ...rest
              Заставили его работать без отдыха, вот он и написал такое ;)
              Ответить
            • честно написать в pred-е idx:*, a:* было бы всё равно короче
              Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

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