Все, что вам нужно сделать, это объявить глобальную функцию с тем же именем, что и ваш класс. И вот что делает рациональный. Rb:
def Rational(a, b = 1)
if a.kind_of?(Rational) && b == 1
a
else
Rational.reduce(a, b)
end
end
чтобы сделать конструктор приватным:
private :initialize
и аналогично для new
метода:
private_class_method :new
Полагаю, Rational.new
можно оставить открытым и сделать так, чтобы Rational()
делал, но наличие метода, который превращает свои аргументы в экземпляры, соответствует Array()
, String()
и т. Д. легко реализовать и понять.