1. Ruby / Говнокод #8026

    −93

    1. 1
    2. 2
    3. 3
    4. 4
    def properties
      Hash.send :[], *(self.class.column_names & self.class::PROPERTIES).
        inject([]) { |a, p| a << p.to_sym << send(p) }
    end

    это же очевидно

    Запостил: LeshaXakir, 29 Сентября 2011

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

    • По моему attributtes делает тоже самое, да?)
      Ответить
      • Не совсем, тут возвращается хеш имя => значение определенных в PROPERTIES атрибутов
        Ответить
        • Тогда или так
          (self.class.column_names & self.class::PROPERTIES).inject({}) { |a, p| a[p.to_sym] = send(p);a }

          Или так
          res = {}
          (self.class.column_names & self.class::PROPERTIES).each{ |p| res[p.to_sym] = send(p) }
          res

          Или так
          Hash[(self.class.column_names & self.class::PROPERTIES).map{ |p| [p.to_sym,send(p)] }]
          Ответить
          • 1 Красивей будет a.merge :p.to_sym => send(p)

            2 Похапе-хардкор

            3 Hash::[] принимает *args, а не массив. Тут ему аж двумерный отправится
            Ответить
            • 1. Да. Так красивее.
              2. Тоже согласен.
              3. Работать будет http://www.ruby-doc.org/core/classes/Hash.html#M000716

              Третий вариант - код с рельс, кстати.
              Но сабж конечно - жесть.
              Ответить
    • Ruby больше Perl, чем сам Perl. В некоторых отношениях. :[]
      Ответить

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