可以重写rebol系统的单词,如print,make等,所以可以用路径运算符做同样的事情吗?那么语法是什么?是否可以覆盖rebol路径运算符?
回答
另一种可能的方法是使用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
}
预处理程序代码,然后将所有的现货..地方,更改代码以正确地插入到“应用 - 我的规则调用,并在T公司将他结束时,运行的代码:
do load code
有一个关于多远,你可以处理,并在运行时改变你的整个代码(第一个例子中的所谓“块模式”是最有效的方式没有真正的限制)。
你的意思是更换(说)......
print mold system/options
与(比如说)....
print mold system..options
....在这里我把它换成REBOL的斜线用点dot语法?
简短回答:否。有些东西被硬连接到解析器中。
运气不好,这将是有用的,通常插入一些业务规则来访问对象。 – 2009-11-03 19:00:17
也许你可以使用表单[在系统'选项中] ... [在系统选项9999中设置]。将其封装在一个函数中,您可以在其中添加自己的代码层。 – Sunanda 2009-11-04 06:45:55
- 1. 是否可以覆盖NSUserDefault?
- 2. REBOL路径运算符与分歧模糊
- 3. 全局覆盖==运算符
- 4. 覆盖运算符c#
- 5. Python覆盖+运算符
- 6. 用qtscript覆盖运算符
- 7. 有什么优势可以覆盖ORM中的==运算符?
- 8. 可以被覆盖/实现的Ruby运算符列表
- 9. 是否可以在全局覆盖print()?
- 10. 可以覆盖是否被弃用?
- 11. 是否可以覆盖例外?
- 12. 是否可以通过XBAP覆盖HTML?
- 13. 是否可以删除或覆盖cmdlet?
- 14. 是否可以覆盖/绕过nscd?
- 15. Rails:覆盖RESTful路径?
- 16. UNIX路径覆盖命令
- 17. Python的路径覆盖
- 18. 图像路径不覆盖
- 19. 覆盖控制器路径中的路径可能吗?
- 20. 在C++中覆盖=运算符
- 21. 覆盖python中的所有运算符
- 22. 覆盖python类上的__or__运算符
- 23. 覆盖的运算符<< in C++
- 24. 覆盖NHibernate中的==(相等)运算符?
- 25. 跨命名空间覆盖运算符
- 26. Dart覆盖一元减运算符
- 27. 我可以使用类路径覆盖正在运行的jar文件吗?
- 28. c#是否将&&和| =运算符短路
- 29. 是否可以找出函数navigator.plugins是否被覆盖
- 30. 是否有可能在我的web应用程序中覆盖相对路径〜/?
非常有趣的感谢源代码,将与它一起玩。 – 2010-04-15 11:42:08