diff options
Diffstat (limited to 'array.rb')
| -rw-r--r-- | array.rb | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -283,5 +283,23 @@ class Array alias filter select end end + + if Primitive.rb_builtin_basic_definition_p(:find) + undef :find + + def find(if_none_proc = nil) # :nodoc: + Primitive.attr! :inline_block, :c_trace + + unless defined?(yield) + return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 0, 0, ary_enum_length)' + end + _i = 0 + value = nil + while Primitive.cexpr!(%q{ ary_fetch_next(self, LOCAL_PTR(_i), LOCAL_PTR(value)) }) + return value if yield(value) + end + if_none_proc ? if_none_proc.call : nil + end + end end end |
