Яuбy / Говнокод #16121 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
[23:16:22] Adam: sorry roles is
Role.all.each do |r|
	@roles << r.name.gsub(/_/,' ').split.map(&:capitalize).join(' ')
end

Американец пробовал вывести массив типа такого ["Student", "Admin", ....] )))

Запостил: tetssuwan tetssuwan, (Updated )

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

  • В чем говно то? each на map не заменишь, раз в каждом элементе может быть несколько разделенных подчеркиванием.
    Ответить
  • Одноразовый кусок кода в переписке. Я и не такое могу наговнокодить в девелоперской консоли.
    Ответить
  • в руби даже говно специфическое... вроде как с первого взгляда похоже на потуги на ФП, но нет - все равно все через ж.
    Ответить
  • Тут главное говно в том, что роли хранятся в тексте. Неужели енум нельзя было завести? и да, джойн явно лишний
    Ответить
    • @roles = Role.all.inject([]) {|out,r| out << r.name.split(/_/).each{|x|x[0]=x[0].upcase;x}}

      Или я рубинуб
      Ответить
        • собирает в аккумулятор

          puts [1,2,3,4,5].inject(0){|sum,x|sum+x}

          >>15

          fold короче
          Ответить
          • Опять эти традиции в руби. reduce и inject в документации нашёл, странно, что fold отсутствует.
            Ответить
            • Всмысле foldl отсутствует? Вот же он судя по параметрам и результатам
              Ответить
              • Отсутствуют методы с именами fold*. Если в ruby есть map и collect, делающие одно и тоже, есть reduce и inject, делающие одно и то же, то почему бы и fold* не запилить?
                Ответить
          • {|sum,x|sum+x}
            Это такая стремная лямбда чтоли? Зачем такой неадекватный синтаксис? Хотя я подозреваю они просто хотели упростить парсинг, потому что стандартный вроде как посложнее может быть.
            Ответить
            • Лямбды, блоки кода, ...
              Рубисту предлагается на выбор множество лямбдоподобных конструкций с разными смыслами и поведением (это мы ещё класс Method не смотрели):
              {|sum,x|sum+x}
              do |sum,x|sum+x end
              Proc.new {|sum,x|sum+x}
              Proc.new do |sum,x|sum+x end
              lambda {|sum,x|sum+x}
              lambda do |sum,x|sum+x end
              ->(sum,x) { sum+x }
              Ответить
                • Судя по документации (а сам я на руби только пару дней писал),
                  puts [1,2,3,4,5].inject(0, :+) # или
                  puts [1,2,3,4,5].inject(:+)
                  Ответить
                  • Оказывается можно. Я тоже на руби не писал много.
                    Ответить
              • В них же еще return по разному работает... в лямбдах - возвращает управление из лямбды, в блоках - из окружающей его функции.
                Ответить
                • А из блока какое значение возвращается? Результат последнего выражения?
                  Ответить
                  • > А из блока какое значение возвращается?
                    Вроде бы да: {|sum,x|sum+x}. Но я не рубист, и руби не люблю. Сталкивался с ним немного, когда возился с рельсами.
                    Ответить
              • do/end - эквивалентны {}, они просто для читаемости (однострочные красивее делать {}, многострочные - do/end).
                Первое от второго и третьего отличается тем где его можно использовать, т.е. одно вместо другого все равно не напишешь. Второго от третьего да, тонкое отличие есть.
                Вот последнего синтаксиса не видел, это в Ruby 2.0\2.1 сахар ввели?
                Ответить
      • все таки немного рубинуб - x[0]=x[0].upcase возвращает х так что ";x" нинужна
        Ответить
      • А толку? Выиграл одну строчку?

        >each{|x|x[0]=x[0].upcase;x}}
        нуб. capitalize как раз это и делает.
        Ответить

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

Помни, guest, за тобой могут следить!

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


    8