ruby - 我可以使用数学符号调用(调用)Ruby 阶乘方法吗?

标签 ruby operator-overloading overriding factorial

我有一个函数可以给出数字的阶乘

class Integer
  def fact
    (1..self).reduce(:*) || 1
  end
end

我想知道如何使用数学符号调用此方法 阶乘“N!”

我已经尝试过

class Integer
  def !
    (1..self).reduce(:*) || 1
  end
end

还有其他事情,但都不起作用。

最佳答案

您只能重载已经存在的运算符。没有使用 ! 作为后缀的 ruby​​ 运算符。

但是,Ruby 确实具有使用 ! 作为前缀的逻辑 not 运算符。这实际上是你重载的。

根据您的代码:

!4 # => 24

当然,这是不可取的,但对于重载的一般工作原理有一定的教育意义。

或者,这更接近惯例:

4.! # => 24

关于ruby - 我可以使用数学符号调用(调用)Ruby 阶乘方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23554050/

相关文章:

ruby-on-rails - 将 Ruby on Rails HTML 表导出到 .xls 文件

ruby-on-rails - 删除 Ruby 数组中的冗余或重复元组

ruby-on-rails - 动态扩展 Virtus 实例属性

C++ 多项式类,指针数组问题

java - Java 中的方法绑定(bind)

java - 如果方法中参数的类扩展了抽象方法中使用的参数的类,则覆盖方法中参数的类

ruby - Ruby 中的一元加运算符有什么意义?

c++ - 中缀 vs 前缀语法 : name lookup differences

c++ - 在函数中使用时自己的 operator+ 的奇怪行为(Point3D(0,0,0)+ 点)

javascript - 如何重写 WebSocket send() 方法