В качестве альтернативы вы можете использовать функцию, которую вы уже использовали.
float_to_list(0.02,[{decimals, 2}])
выводит «0.02»
Или для пользователей Elixir;)
:erlang.float_to_list(5.231,[{:decimals, 2}])
выходы «5.2»
Есть два способа перегрузить операторы :
Приведенная выше ссылка поясняет в хорошей таблице, что перегрузка возможна в виде функций-членов для =
, ()
, []
и ->
, но запрещена как свободная функция ,
Кроме того, оператор разрешения области действия ::
, а также доступ к элементу .
, краткий указатель доступа к элементу на элемент .*
и троичный условный оператор x ? y : z
не могут быть перегружены [ 1112] вообще.
Редактировать: Вот пример , где operator*
определен как функция-член и operator+
как не-функция:
class Rational {
int p;
int q;
public:
Rational (int d=0, int n=1) : p{d}, q{n} { }
Rational operator*(const Rational& r) const { // for curent object * r
return Rational(p*r.p,q*r.q);
}
int numerator() const {return p; }
int denominator() const { return q; }
};
Rational operator+(const Rational &a, const Rational &b) { // for object a + object b
return Rational(a.numerator()*b.denominator()+b.numerator()*a.denominator(),
a.denominator()*b.denominator());
}