Rebol中的反思:是否可以知道正在执行的脚本/对象/函数?

时间:2009-10-18 18:11:22

标签: rebol

如果不是这样可以在R3中使用吗?

1 个答案:

答案 0 :(得分: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