سؤال

I can get Infinity and NaN by

n = 9.0 / 0 #=> Infinity
n.class #=> Float

m = 0 / 0.0 #=> NaN
m.class #=> Float

but when I want to access Infinity or NaN directly:

Infinity #=> uninitialized constant Infinity (NameError)
NaN #=> uninitialized constant NaN (NameError)

What are Infinity and NaN? Are they objects, keywords, or something else?

هل كانت مفيدة؟

المحلول

What you see printed as Infinity and NaN are just the string representations for two special instances of the Float class, not keywords or literals. They are returned by floating point division by 0 or by referencing the constants Float::INFINITY and Float::NAN.

Float::INFINITY.class
# => Float
Float::INFINITY.to_s
# => "Infinity"

Float::NAN.class
# => Float
Float::NAN.to_s
# => "NaN"

نصائح أخرى

If you want inf/nan literal, use follow:

>> Float::INFINITY
=> Infinity
>> Float::NAN
=> NaN

See Float constants list

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top