aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--numeric.c1
-rw-r--r--numeric.rb19
2 files changed, 20 insertions, 0 deletions
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 <tt>:to_int</tt>,
+# calls <tt>object.to_int</tt> and returns the result.
+#
+# Returns +nil+ if +object+ does not respond to <tt>:to_ary</tt>
+#
+# Raises an exception unless <tt>object.to_int</tt> 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: