可以覆盖 rebol 系统单词,如 print、make 等,那么是否可以对路径运算符执行相同的操作?那么语法是什么?
最佳答案
另一种可能的方法是使用 REBOL 元编程功能并预处理您自己的代码以捕获路径访问并添加处理程序代码。这是一个例子:
apply-my-rule: func [spec [block!] /local value][
print [
"-- path access --" newline
"object:" mold spec/1 newline
"member:" mold spec/2 newline
"value:" mold set/any 'value get in get spec/1 spec/2 newline
"--"
]
:value
]
my-do: func [code [block!] /local rule pos][
parse code rule: [
any [
pos: path! (
pos: either object? get pos/1/1 [
change/part pos reduce ['apply-my-rule to-block pos/1] 1
][
next pos
]
) :pos
| into rule ;-- dive into nested blocks
| skip ;-- skip every other values
]
]
do code
]
;-- example usage --
obj: make object! [
a: 5
]
my-do [
print mold obj/a
]
这会给你:
-- path access --
object: obj
member: a
value: 5
--
5
另一种(较慢但更灵活)的方法也可以是将字符串模式的代码传递给预处理器,从而使您摆脱任何 REBOL 特定语法规则,如下所示:
my-alternative-do {
print mold obj..a
}
然后,预处理器代码将发现所有 .. 位置并更改代码以正确插入对“apply-my-rule”的调用,并最终使用以下命令运行代码:
do load code
在运行时处理和更改整个代码的程度没有真正的限制(第一个示例中所谓的“ block 模式”是最有效的方法)。
关于rebol - 是否可以覆盖 rebol 路径运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1657739/