Ruby中的PI类型是什么?

时间:2012-06-11 12:06:44

标签: ruby-on-rails ruby

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

我可以这样写:Math::sinMath::PIMath.sinMath.PI

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

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

Math::PI

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

Math::sin

点运算符向对象发送消息,这是一种说它调用方法的奇特方式。 PI是常量,因此您无法以这种方式访问​​它。 Math.PI相当于Math.send :PI,由于Mathrespond_to? :PI,因此不起作用。当然,你可以修复:

def Math.PI
  Math::PI
end

Math.PI

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

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

Math.PI
Math.E

答案 2 :(得分:1)

首先,没有Math.PI,它是Math::PI - 在这种情况下,请使用实际工作的那个。

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

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

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

答案 3 :(得分:0)

如果我的问题是正确的,那么你要求cos返回的值的类型。而不是告诉你它是什么,我更愿意向你展示一种自己检查它的方法。

irb(main):003:0>Math::cos(0.2).class
=> Float
irb(main):004:0> Math::PI.class
=> Float

答案 4 :(得分:0)

如果你在代码中include Math,那么你可以写:

PI
cos(0.12)

只有在未包含Math时才需要加Math前缀。

您是否尝试过使用围绕Math模块的宝石?查看math_calculator gem。这将允许您正常编写表达式,例如。 “4 * pi * cos(0.12)”等。