ДействиеСценарий / Говнокод #13858 Ссылка на оригинал

0

  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 strax, (Updated )

Комментарии (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"
                      ]
        Ответить
          • Это мой косяк, тут должна была быть "Женя". И вообще, хаскель же 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:* было бы всё равно короче
            Ответить
  • gwCmDjyZSXSAczLCWfvTAKRNPWqfWSaNGpeUiypohqQZkezlwQWgNSYAIEtAlygJpmtu
    Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8