В чем смысл унарного оператора plus в Ruby?

помимо создания хорошей симметрии с унарным минусом, почему унарный оператор plus определен на Numeric класса? Есть ли в этом какая-то практическая ценность, за исключением того, что вызывает путаницу, позволяя писать такие вещи, как ++i (которая, в отличие от большинства не-рубистов подумать, не прирастить i).

Я могу подумать о сценарии, где определение унарного плюс на пользовательском классе может быть полезно (скажем, если вы создаете какой-то сексуальный DSL), поэтому возможность определить его в порядке, но почему это уже определено на рубиновых числах?

2 ответов


возможно, это просто вопрос согласованности, как с другими языками программирования, так и для отражения унарного минуса.

нашел поддержку для этого в Язык Программирования Ruby (написано Юкихиро Мацумото, разработавшим Ruby):

унарный плюс, но это никак не влияет на числовые операнды-он просто возвращает значение своего операнда. Он предусмотрен для симметрии с унарным минусом, и может, конечно, быть переопределяемый.


одна из возможных причин, которую я вижу, - это явно указать, что число положительно(хотя по умолчанию оно положительное).

ruby-1.9.2-p136 :051 > +3
 => 3 
ruby-1.9.2-p136 :052 > 3
 => 3