2016-11-22 2 views
4

Я хотел бы создать два оператора унарного постфикса ! и !! для класса Numeric в рубине. У меня он определил, как это до сих порМогу ли я перегрузить/создать постфиксный унарный оператор?

class Numeric 
    def ! 
    (1..self).inject(:*) 
    end 

    def !! 
    if self.even? 
     (2..self).step(2).inject(:*) 
    else 
     (1..self).step(2).inject(:*) 
    end 
    end 
end 

Однако, это означает, что я должен вызвать 5.! и 5.!!. Я знаю, что вы можете определить унарные префиксные операторы, такие как [email protected] и [email protected], но мне было интересно, могу ли я определить унарный оператор постфикса, чтобы я мог позвонить 5! и 5!! вместо 5.! и 5.!!.

+0

Я не знал, что '!' Будет правильным именем метода, сладким! – ndn

ответ

4

Нет. Во-первых, в Ruby нет постфиксных операторов, поэтому синтаксический анализатор не смог идентифицировать его. Во-вторых, даже если у нас были постфиксные операторы, завершающий восклицательный знак является частью имени метода, поэтому, если у вас есть в вашей программе foo!, было бы истолковано как метод foo!, а не как foo с использованием !.

+0

Спасибо. Я предположил, что нет, но иногда я изучаю новые мысли из SO. Хорошее объяснение. –

Смежные вопросы