可以重寫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. 覆蓋運算符c#
- 4. 全局覆蓋==運算符
- 5. 用qtscript覆蓋運算符
- 6. OpenCL cl_float4運算符覆蓋
- 7. 如何覆蓋==運算符
- 8. Python覆蓋+運算符
- 9. 是否可以添加運算符類?
- 10. 可以被覆蓋/實現的Ruby運算符列表
- 11. 有什麼優勢可以覆蓋ORM中的==運算符?
- 12. 是否可以覆蓋例外?
- 13. 是否可以刪除或覆蓋cmdlet?
- 14. 可以覆蓋是否被棄用?
- 15. 是否可以通過XBAP覆蓋HTML?
- 16. 是否可以覆蓋/繞過nscd?
- 17. 是否可以在全局覆蓋print()?
- 18. 更新路徑而不是覆蓋cmd
- 19. 覆蓋控制器路徑中的路徑可能嗎?
- 20. Rails:覆蓋RESTful路徑?
- 21. UNIX路徑覆蓋命令
- 22. 噶覆蓋文件路徑
- 23. 圖像路徑不覆蓋
- 24. Python的路徑覆蓋
- 25. 數學運算符可以應用於綁定路徑嗎?
- 26. 提取操作符(>>)是否可以覆蓋變量?
- 27. 跨命名空間覆蓋運算符
- 28. 覆蓋的運算符<< in C++
- 29. Ruby中的覆蓋==運算符
- 30. 覆蓋sqlalchemy中的__eq__運算符
非常有趣的感謝源代碼,將與它一起玩。 – 2010-04-15 11:42:08