2

カスタム演算子を定義できるようにしたいと思います。それは可能ですか?たとえば、a***b何かを意味するために。

既存のオペレーターにモンキーパッチを適用することも可能ですか?たとえば、a**b常にフロートを返すようにするには?

4

2 に答える 2

3

はい、できます。例えば:

class Fixnum
  def **(x)
    self.*(x)*1.0
  end
end

5**4 #==> 20.0
于 2013-03-26T21:21:06.763 に答える
2

カスタムオペレーター?Cパーサー(またはJRubyの場合はJavaパーサーなど)をハックしたい場合を除いて、そうではありません。OTOH、演算子は主にメソッドの構文糖衣構文であり、必要なすべてのメソッドを定義できます。

多くの演算子(すべてではありません)は単なる偽装メソッドであるため、既存の演算子の実装に必要なだけモンキーパッチを適用できます。独自の**実装を定義するすべての数値クラスを追跡し、それらすべてにパッチを適用する必要があります。Rationalコアから、、、 ...をカバーする必要があることに注意してください。また、標準ライブラリからBigDecimalComplexのようなものもカバーする必要があります。私はこれをしないことを強くお勧めします、あなたはただ痛みと苦しみのためにあなた自身を準備しているでしょう。たとえば、結果がに収まらない場合はどうしますか?どうですか?何かにsが必要な場合は、呼び出しで明示的にしてください。BigDecimal#**FloatComplex#**Floatto_f

于 2013-03-26T21:24:57.037 に答える