But there are differences. ‘insert’ is a built in operator which cannot be passed as the first item by reference over a handle.
(This is causing the issue you are seeing)
q)value(upd;tab;enlist 5) //Pass by reference succeeds for user defined function ,4 q)value(insert;tab;enlist 6) //Pass by reference fails for operator 'insert [0] value(insert;tab;enlist 5) ^ q)value(“insert”;tab;enlist 6) //Pass as parse string succeeds ,5 q)value(insert;tab;enlist 6) //Pass by value succeeds ,6
User defined functions can only use prefix notation whereas operators can be used prefix or infix.
q)tab insert enlist 7 //Infix with operator succeeds ,7 q)tab upd enlist 8 //Infix with user defined function fails 'type [0] tab upd enlist 8 ^ q)insert[tab;enlist 8] //Prefix with operator succeeds ,8 q)upd[`tab;enlist 9] //Prefix with user defined function succeeds ,9