def =~(other)
      case other
      when Unit
        signature == other.signature
      else
        begin
          x, y = coerce(other)
          return x =~ y
        rescue ArgumentError
          return false
        end
      end
    end
def =~(other)
      case other
      when Unit
        signature == other.signature
      else
        begin
          x, y = coerce(other)
          return x =~ y
        rescue ArgumentError
          return false
        end
      end
    end
Compare two Unit objects. Throws an exception if they are not of compatible types.
 Comparisons are done based on the value of the unit in base SI units.
 @param [Object] other
 @return [-1|0|1|nil]
 @raise [NoMethodError] when other does not define <=>
 @raise [ArgumentError] when units are not compatible
 Compare Units for equality
 this is necessary mostly for Complex units.  Complex units do not have a <=> operator
 so we define this one here so that we can properly check complex units for equality.
 Units of incompatible types are not equal, except when they are both zero and neither is a temperature
 Equality checks can be tricky since round off errors may make essentially equivalent units
 appear to be different.
 @param [Object] other
 @return [Boolean]
 check to see if units are compatible, but not the scalar part
 this check is done by comparing signatures for performance reasons
 if passed a string, it will create a unit object with the string and then do the comparison
 @example this permits a syntax like:
  unit =~ "mm"
 @note if you want to do a regexp comparison of the unit string do this ...
  unit.units =~ /regexp/
 @param [Object] other
 @return [Boolean]