0
如果不是這樣可以在R3?Rebol中的反思:是否有可能知道正在執行的腳本/對象/函數?
如果不是這樣可以在R3?Rebol中的反思:是否有可能知道正在執行的腳本/對象/函數?
是和
技術上號,沒有.....函數沒有名字,他們是匿名的。同一個函數可能被分配給多個單詞,所以實際的名字是有問題的。
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
嗨,尚達表示感謝,但是仍然應該可以將它與一般情況下的自我引用相提並論嗎? – 2009-10-18 21:02:34
或者應該有一個系統變量,它應該存儲像system/options/script這樣的上下文信息。 – 2009-10-18 21:08:00
不幸的是,'自我意味着事物本身,而不是它分配給它的任何單詞的名稱。這個「訣竅」不適用於對象/上下文:probe o1:context [o1-name:get in disarm try [0/0]'where o1-self:self] – Sunanda 2009-10-18 21:30:09