2012-06-11 69 views

回答

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,例如,User.findAll),我經常是如何大多數其他語言使用做到這一點。

編輯哦,我可能誤解了這個問題。

0

如果我得到你的問題的權利,你所要求的是餘弦返回值的類型。而不是告訴你它是什麼,我寧願告訴你一種方法來自己檢查它。

irb(main):003:0>Math::cos(0.2).class 
=> Float 
irb(main):004:0> Math::PI.class 
=> Float 
8
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 
+0

高興地注意到,儘管數學:: PI可能是浮動,你可以將PI推廣到BigDecimal,指出'type'在Ruby中是可替換的(有嚴格的規則)。 – ChuckCottrill

0

如果include Math在你的代碼,那麼你可以這樣寫:

PI 
cos(0.12) 

您需要前綴Math只有當不包括Math

您是否嘗試過用數學模塊纏寶石?看看math_calculator寶石。這將允許您正常編寫表達式,例如。 「4個* PI * COS(0.12)」 等

5

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