Ruby中的PI类型是什么?

Moh*_*jaj 7 ruby ruby-on-rails

我想问一下使用Ruby的PI和cos的类型.写这些类型的惯例是什么?

我可以这样写:Math::sin,Math::PI或者Math.sin,Math.PI

ste*_*lag 9

puts Math::PI
#=> 3.141592653589793
include Math
puts PI.class
#=> Float
require "bigdecimal/math"
include BigMath
puts PI(50).class
#=> BigDecimal
puts PI(50)
#=> 0.3141592653589793238462643383279502884197169399375105820974944592309049629352442819E1
Run Code Online (Sandbox Code Playgroud)


Mat*_*ira 7

PI是属于模块的常量Math.通过::运算符访问常量:

Math::PI
Run Code Online (Sandbox Code Playgroud)

我相信它被称为范围解析运算符.它也可以解析为类方法,所以你绝对可以写:

Math::sin
Run Code Online (Sandbox Code Playgroud)

点运算符向对象发送消息,这是一种说它调用方法的奇特方式.PI是一个常数,所以你不能这样访问它.Math.PI相当于Math.send :PI,因为没有,所以Math不起作用respond_to? :PI.当然,您可以解决这个问题:

def Math.PI
  Math::PI
end

Math.PI
Run Code Online (Sandbox Code Playgroud)

有了method_missing,您甚至可以使用任何常量:

def Math.method_missing(method, *arguments, &block)
  Math.const_get method, *arguments, &block
end

Math.PI
Math.E
Run Code Online (Sandbox Code Playgroud)


Dav*_*ton 2

首先,没有Math.PIMath::PI在这种情况下,使用实际有效的。

[1] pry(main)> Math.PI
NoMethodError: undefined method `PI' for Math:Module
[2] pry(main)> Math::PI
=> 3.141592653589793
Run Code Online (Sandbox Code Playgroud)

sin等都是函数,可以通过任何一种方式访问​​。我使用点符号 ,Math.sin(foo)因为它更容易阅读(意见问题),并且类似于其他 Rails 代码的规范编写方式(如 Rails 的 ActiveRecord findAll,例如User.findAll),以及我经常使用的大多数其他语言的做法。

编辑哦,我可能误解了这个问题。