9

RubyでのPIとcosの型についてお聞きしたいです。これらの型を記述する規則は何ですか?

Math::sinMath::PIまたはMath.sin、のように書くことはできますMath.PIか?

4

5 に答える 5

11
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
于 2012-06-11T12:24:31.287 に答える
10

PIモジュールに属する定数です。定数は、演算子Mathを介してアクセスされます。::

Math::PI

スコープ解決演算子と呼ばれるものだと思います。クラスメソッドにも解決できるため、次のように書くことができます。

Math::sin

ドット演算子は、オブジェクトにメッセージを送信します。これは、メソッドを呼び出すという手の込んだ言い方です。PIは定数なので、その方法でアクセスすることはできません。Math.PIは と同等ですがMath.send :PI、 は動作Mathしませんrespond_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
于 2012-06-11T13:28:04.227 に答える
2

まず、ありませんMath.PIMath::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のActiveRecordfindAllなどUser.findAll)や、私が定期的に使用している他のほとんどの言語と同様であるためです。

編集ああ、私は質問を誤解したかもしれません。

于 2012-06-11T12:12:38.887 に答える
0

あなたの質問が正しければ、cos が返す値の型を尋ねていることになります。それが何であるかを説明するよりも、自分で確認する方法をお見せしたいと思います。

irb(main):003:0>Math::cos(0.2).class
=> Float
irb(main):004:0> Math::PI.class
=> Float
于 2012-06-11T12:14:58.940 に答える
0

あなたinclude Mathのコードにいる場合は、次のように書くことができます:

PI
cos(0.12)

が含まれていないMath場合にのみプレフィックスが必要です。Math

Math モジュールにラップされた gem を使用してみましたか? math_calculator ジェムをチェックしてください。これにより、式を通常どおりに記述できるようになります。「4*pi*cos(0.12)」など

于 2012-06-11T12:56:09.947 に答える