def si_base_units(by=nil)
      val = self.to_hash.map do |dimension, index|

        dimension_name = dimension.remove_underscores
        Unit.base_quantity_si_units.select do |unit|
          unit.measures == dimension_name
        end.first.clone ** index
      end
      val = val.map(&by) if by
      val.to_a
    end
def si_base_units(by=nil)
      val = self.to_hash.map do |dimension, index|

        dimension_name = dimension.remove_underscores
        Unit.base_quantity_si_units.select do |unit|
          unit.measures == dimension_name
        end.first.clone ** index
      end
      val = val.map(&by) if by
      val.to_a
    end
Returns an array representing the base SI units for the physical quantity
 described by self

 If no argument is given, the array holds instances of Unit::Base (or
 subclasses) which represent each base unit. Alternatively only the names
 or symbols of each unit can be returned by providing the appropriate unit
 attribute as a symbolized argument, e.g.

   Dimensions.energy.si_base_units       #=> [ #<Quantify::Unit: .. >,
                                               #<Quantify::Unit: .. >,
                                               ... ]

   Dimensions.energy.si_base_units :name

                                         #=> [ "metre squared",
                                               "per second squared",
                                               "kilogram"]    

   Dimensions.force.units :symbol        #=> [ "m", "s^-2", "kg"]