ruby - 为什么 sqrt() 不是 Numeric 上的方法?

标签 ruby oop

在 Ruby 中,一切皆对象。这就是为什么我不明白为什么我们有 Math 模块。在我看来,Math 模块中的大部分(全部?)函数应该是 Integer、Float 等数字类型的方法。

例如而不是

Math.sqrt(5)

这样会更有意义

5.sqrt

sincostanlog10等也是如此。

有谁知道为什么所有这些函数最终都在数学模块中?

最佳答案

我不知道 Ruby 的早期历史,但我感觉 Math 模块是在 C header 之后建模的。不过,它在 Ruby 标准库中是一只奇怪的鸭子。

但是,它是 Ruby!所以你总能摆脱猴子补丁!

class Float
  def sqrt; Math.sqrt(self); end
  def sin; Math.sin(self); end
  def cos; Math.cos(self); end
  def tan; Math.tan(self); end
  def log10; Math.log10(self); end
end

关于ruby - 为什么 sqrt() 不是 Numeric 上的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2844526/

相关文章:

ruby-on-rails - Mongoid 3.0 嵌入 1-N 查询,用于列出所有嵌入字段

c# - 私有(private)成员与公共(public) getter 和 setter 的目的是什么? C#

ruby - 未定义方法的纯 Ruby rspec 测试通过

ruby - nginx 背后的 Unicorn vs Passenger Standalone

php - 如何在不重新索引的情况下将项目添加到 laravel 列表集合中?

ios - View 应该包含模型引用吗?

c# - 如何检测彼此靠近的两个窗口

java - 嵌套静态类无法返回其静态字段

ruby - EventMachine 和循环

ruby - 将原始代码从 github 管道传输到 ruby​​ 不起作用?