public static IObject Invoke(IObject obj, Arguments arguments, Lambda lambda) { Fields fields; if (obj is UserObject uo) { fields = uo.Fields; } else { fields = new Fields(); fields.New("self"); fields.Assign("self", obj); } if (Machine.Current.Invoke(lambda.Invokable, arguments, fields).If(out var value, out var anyException)) { return(value); } else if (anyException.If(out var exception)) { throw exception; } else { return(Void.Value); } }