def si_unit
      return Unit.steridian if describe == 'solid angle'
      return Unit.radian    if describe == 'plane angle'

      val = si_base_units
      return nil unless val
      return val[0] if val.length == 1
      val = val.inject(Unit.unity) do |compound,unit|
        compound * unit
      end
      val = val.or_equivalent unless val.acts_as_equivalent_unit
    end
def si_unit
      return Unit.steridian if describe == 'solid angle'
      return Unit.radian    if describe == 'plane angle'

      val = si_base_units
      return nil unless val
      return val[0] if val.length == 1
      val = val.inject(Unit.unity) do |compound,unit|
        compound * unit
      end
      val = val.or_equivalent unless val.acts_as_equivalent_unit
    end
Returns the SI unit for the physical quantity described by self.

 Plane/solid angle are special cases which are dimensionless units, and so
 are handled explicitly. Otherwise, the si base units for each of the base
 dimensions of self are indentified and the corresponding compound unit is
 derived. If this new unit is the same as a known (SI derived) unit, the
 known unit is returned.

   Dimensions.energy.units                  #=> #<Quantify::Dimensions: .. >

   Dimensions.energy.si_unit.name           #=> 'joule'

   Dimensions.kinematic_viscosity.si_unit.name

                                            #=> 'metre squared per second'