RubyでのPIとcosの型についてお聞きしたいです。これらの型を記述する規則は何ですか?
Math::sin
、Math::PI
またはMath.sin
、のように書くことはできますMath.PI
か?
RubyでのPIとcosの型についてお聞きしたいです。これらの型を記述する規則は何ですか?
Math::sin
、Math::PI
またはMath.sin
、のように書くことはできますMath.PI
か?
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
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
まず、ありません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のActiveRecordfindAll
などUser.findAll
)や、私が定期的に使用している他のほとんどの言語と同様であるためです。
編集ああ、私は質問を誤解したかもしれません。
あなたの質問が正しければ、cos が返す値の型を尋ねていることになります。それが何であるかを説明するよりも、自分で確認する方法をお見せしたいと思います。
irb(main):003:0>Math::cos(0.2).class
=> Float
irb(main):004:0> Math::PI.class
=> Float
あなたinclude Math
のコードにいる場合は、次のように書くことができます:
PI
cos(0.12)
が含まれていないMath
場合にのみプレフィックスが必要です。Math
Math モジュールにラップされた gem を使用してみましたか? math_calculator ジェムをチェックしてください。これにより、式を通常どおりに記述できるようになります。「4*pi*cos(0.12)」など