Quiero preguntar sobre el tipo de PI y cos con Ruby. ¿Cuál es la convención para escribir estos tipos?cuál es el tipo de PI, cos en Ruby
¿Puedo escribir como: Math::sin
, Math::PI
o Math.sin
, Math.PI
?
Quiero preguntar sobre el tipo de PI y cos con Ruby. ¿Cuál es la convención para escribir estos tipos?cuál es el tipo de PI, cos en Ruby
¿Puedo escribir como: Math::sin
, Math::PI
o Math.sin
, Math.PI
?
Primero, no hay Math.PI
, es Math::PI
--en este caso, use el que realmente funciona.
[1] pry(main)> Math.PI
NoMethodError: undefined method `PI' for Math:Module
[2] pry(main)> Math::PI
=> 3.141592653589793
sin
etc. son funciones, y se puede acceder de cualquier manera. Yo uso de puntos y notación, Math.sin(foo)
, porque es más fácil en los ojos (cuestión de opinión), y similar a cómo el código otros carriles está escrito canónicamente (como ActiveRecord de Rails findAll
, por ejemplo, User.findAll
), y como la mayoría de otros idiomas que utilizo regularmente hazlo.
Editar Oh, puedo haber entendido mal la pregunta.
Si recibo su pregunta correctamente, usted está preguntando por el tipo del valor que cos devuelve. En lugar de decirte de qué se trata, prefiero mostrarte una forma de comprobarlo por ti mismo.
irb(main):003:0>Math::cos(0.2).class
=> Float
irb(main):004:0> Math::PI.class
=> Float
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
Si include Math
en su código, a continuación, puedes escribir:
PI
cos(0.12)
Necesitas prefijar Math
sólo cuando Math
no está incluido.
¿Has probado usar una gema envuelta alrededor del módulo Math? Mira la gema math_calculator. Eso te permitirá escribir tus expresiones normalmente, ej. "4 cos * pi * (0,12)" etc.
PI
es una constante que pertenece al módulo de Math
. Las constantes se accede a través del operador ::
:
Math::PI
creo que se llama el alcance resolución operador. También puede resolver a métodos de clase, por lo que definitivamente se puede escribir:
Math::sin
El operador punto envía mensajes a los objetos, que es una forma elegante de decir que llama métodos. PI
es una constante, por lo que no puede acceder de esa manera. Math.PI
es equivalente a Math.send :PI
, que no funciona ya que Math
no es respond_to? :PI
. Por supuesto, usted puede arreglar eso:
def Math.PI
Math::PI
end
Math.PI
Con method_missing
, incluso se puede hacer que funcione con cualquier constante:
def Math.method_missing(method, *arguments, &block)
Math.const_get method, *arguments, &block
end
Math.PI
Math.E
bueno tener en cuenta que a pesar de Matemáticas :: PI puede ser flotante , puede promocionar PI a BigDecimal, señalando que 'tipo' es fungible (con reglas estrictas) en Ruby. – ChuckCottrill