fn slice_(vm: &mut VM, self_val: Value, args: &Args2) -> VMResult {
    args.check_args_num(2)?;
    let start = vm[0].coerce_to_fixnum("Currently, first arg must be Integer.")?;
    if start < 0 {
        return Err(RubyError::argument("First arg must be positive value."));
    };
    let len = vm[1].coerce_to_fixnum("Currently, second arg must be Integer")?;
    if len < 0 {
        return Err(RubyError::argument("Second arg must be positive value."));
    };
    let start = start as usize;
    let len = len as usize;
    let mut aref = self_val.into_array();
    let ary_len = aref.len();
    if ary_len < start {
        return Ok(Value::nil());
    }
    if ary_len <= start || len == 0 {
        return Ok(Value::array_from(vec![]));
    }
    let end = if ary_len < start + len {
        ary_len
    } else {
        start + len
    };
    let new = aref.drain(start..end);
    Ok(Value::array_from(new))
}
## instance method Array#slice!
- slice!(nth) -> object | nil         NOT SUPPORTED
- slice!(start, len) -> Array | nil
- slice!(range) -> Array | nil        NOT SUPPORTED

https://docs.ruby-lang.org/ja/latest/method/Array/i/slice=21.html
ruruby/src/builtin/array.rs