Если это невозможно в R3?Отражение в Rebol: возможно ли узнать исполняемый скрипт/объект/функцию?
0
A
ответ
3
Да и №
Технически, нет ..... функции не имеют названия, они являются анонимными. Та же функция может быть назначена более чем одному слову, поэтому фактическое имя является проблематичным.
do func [][print "hi world"] ;; this function explicitly has no name at all
f1: func [] [print "yo world"] ;; here's a single function with three names
f2: :f1
f3: :f2
На практике в некоторых случаях, да .... Вы можете получить текущее имя (если есть) с трюком: захватить ошибку, и объект ошибки содержит имя в стеке:
f3: func [/local eo] [eo: disarm try [0/0 ] print ["name is " eo/where]]
f4: :f3
Попробуйте:
>> f3
name is f3
>> f4
name is f4
Существует исчерпывающее обсуждение здесь: http://www.rebol.org/ml-display-thread.r?m=rmlGLPJ
Привет, Саннанда, спасибо, но тогда все еще можно было бы ссылаться на нее в общем-то вроде себя или этого? –
Или должна быть системная переменная, которая должна хранить эту контекстуальную информацию, такую как system/options/script. –
К сожалению, «само по себе означает сама вещь, а не имя любого слова, которому она назначена. Этот «трюк» не работает с объектами/контекстами: probe o1: context [o1-name: get in disarm try [0/0] ', где o1-self: self] – Sunanda