Можно ли определить собственные литералы в Ruby? - PullRequest
0 голосов
/ 18 ноября 2018

Для десятичной арифметики с плавающей точкой произвольной точности в Ruby мы можем использовать библиотеку BigDecimal. К сожалению, по сравнению с числами с плавающей запятой каждому явно заданному BigDecimal нужно много печатать:

bd = BigDecimal("42.0")
# vs.
fl = 42.0

Можно ли определить собственные литералы в Ruby?

Так, например, BigDecimal сверху может быть выражен как:

bd = 42°0

Или, по крайней мере:

bd = %b(42.0)

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Вы могли бы иметь:

def b(number)
  BigDecimal(number)
end

Тогда b(42.0) будет работать, очень близко к %b(42.0)

0 голосов
/ 18 ноября 2018

Нет, Ruby не допускает пользовательские литералы, перегрузку литералов или любые другие подобные вещи.

Ruby позволяет определять методы операторов для существующих операторов, но не определять новые операторы, поэтому даже обрабатывать

42°0

в качестве бинарного оператора ° не будет работать.

Самое близкое, что вы можете получить, - это патч ° для Integer:

.
class Integer
  def °(decimal_part)
    BigDecimal("#{self}.#{decimal_part}")
  end
end
...