В Rebol любая встроенная функция может быть переопределена. Вы действительно переопределили функцию set
выше.
Однако, увидев полученную ошибку, вы должны были изучить функцию throw-on-error
. Вы бы узнали, что в исходном коде функции есть вызов функции set
, который выглядит следующим образом:
set/any 'blk try ...
Этот вызов предполагает, что функция throw-on-error
предполагает, что переменная set
ссылается на функцию, имеющую уточнение /any
. Поскольку ваша переопределенная версия функции не имеет такого уточнения, функция throw-on-error
не может вызывать ее таким образом и, следовательно, полученную вами ошибку.
Вообще говоря, вы можете переопределить что угодно, но вы должны взять на себя ответственность за переопределение, особенно если переопределенная версия не обратно совместима с оригиналом.