pub(super) fn invoke_proc(
        &mut self,
        proc: Value,
        self_value: impl Into<Option<Value>>,
        args: &Args2,
    ) -> InvokeResult {
        let pinfo = proc.as_proc().unwrap();
        let self_val = match self_value.into() {
            Some(v) => v,
            None => pinfo.self_val,
        };
        (self.sp() - args.len() - 1)[0] = self_val;
        self.invoke_block(pinfo.method, pinfo.outer, args) //TODO:lambda or proc
    }
Invoke the Proc object with given `args`.
ruruby/src/vm/executor/method.rs