13. HISTORY.delete_if
require "readline"
class << Readline::HISTORY
def delete_if(&block)
return enum_for(__method__) unless block
raise SecurityError if $SAFE == 4
i = 0
while (size > i) do
break unless entry = self[i]
if block.call(entry)
delete_at(i)
else
i += 1
end
end
return self
end
end
12 14
14. hist_delete_if
static VALUE
hist_delete_if(VALUE self)
{
HIST_ENTRY *entry;
int i = 0;
RETURN_ENUMERATOR(self, 0, 0);
rb_secure(4);
while (history_length > i) {
entry = history_get(history_get_offset_func(i));
if (entry == NULL) break;
if (RTEST(rb_yield(rb_locale_str_new_cstr(entry->line))))
rb_remove_history(i);
else
i++;
}
return self;
}
13 14