diff --git a/numeric.c b/numeric.c index 28b68a71fb..d6fe05d8e8 100644 --- a/numeric.c +++ b/numeric.c @@ -5991,6 +5991,7 @@ rb_int_s_isqrt(VALUE self, VALUE num) } } +/* :nodoc: */ static VALUE int_s_try_convert(VALUE self, VALUE num) { diff --git a/numeric.rb b/numeric.rb index 08b31ac307..d48a4ee336 100644 --- a/numeric.rb +++ b/numeric.rb @@ -229,6 +229,25 @@ class Integer end end +# call-seq: +# Integer.try_convert(object) -> object, integer, or nil +# +# If +object+ is an \Integer object, returns +object+. +# +# Otherwise if +object+ responds to :to_int, +# calls object.to_int and returns the result. +# +# Returns +nil+ if +object+ does not respond to :to_ary +# +# Raises an exception unless object.to_int returns an \Integer object. +# +def Integer.try_convert(num) +=begin + Primitive.attr! 'inline' + Primitive.cexpr! 'rb_check_integer_type(num)' +=end +end if false + class Float # # call-seq: