2009-10-18 1 views

ответ

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

+0

Привет, Саннанда, спасибо, но тогда все еще можно было бы ссылаться на нее в общем-то вроде себя или этого? –

+0

Или должна быть системная переменная, которая должна хранить эту контекстуальную информацию, такую ​​как system/options/script. –

+0

К сожалению, «само по себе означает сама вещь, а не имя любого слова, которому она назначена. Этот «трюк» не работает с объектами/контекстами: probe o1: context [o1-name: get in disarm try [0/0] ', где o1-self: self] – Sunanda

 Смежные вопросы

  • Нет связанных вопросов^_^