2016-11-22 7 views
4

私はrubyのクラスNumericのために2つの単項演算子演算子!!!を作りたいと思います。私はそれがこれまでのように定義された後置単項演算子をオーバーロード/作成できますか?

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

第1に、Rubyには後置演算子がないため、パーサーはそれを識別できませんでした。第2に、たとえ我々が後置演算子を持っていたとしても、後ろの感嘆符はメソッド名の一部なので、あなたのプログラムにはfoo!の場合はfooとし、!を適用したのではなく、foo!と解釈されます。

+0

ありがとうございます。私は思っていませんでしたが、時には私はSOから新しい考えを学びます。いい説明。 –

関連する問題