Можно использовать системные слова 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
}
код препроцессор затем определить все .. места и изменить код, чтобы правильно вставить вызовы на «применить-моему-правила, и было бы в т он конец, запустить код с:
do load code
Там нет никаких реальных ограничений на том, как далеко вы можете обработать и изменить весь свой код во время выполнения (так называемый режим «блок» в первом примере является наиболее эффективным способом).
Вы имеете в виду заменить (скажем) ....
print mold system/options
с (скажем) ....
print mold system..options
.... где я заменил для Rebol слеш с dot dot синтаксис?
Короткий ответ: нет. Некоторые вещи жестко привязаны к парсеру.
Невероятно, это было бы полезно, если бы вставляли некоторые бизнес-правила для доступа к объектам. –
Возможно, вы могли бы использовать форму [get in system 'options] ... [set in system' options 9999]. Оберните это в функцию, и вы можете добавить туда свои собственные уровни кода. – Sunanda
- 1. Можно ли переопределить оператор нуль-коалесценции?
- 2. Можно ли переопределить операторов?
- 3. Можно ли переопределить ResolveUrl?
- 4. Можно ли переопределить геттер?
- 5. Можно ли переопределить формы?
- 6. Можно ли переопределить window.document.location.host?
- 7. Можно ли переопределить «описать»?
- 8. Можно ли переопределить drupal_build_css_cache?
- 9. Можно ли переопределить оператор Hibernate «как» в HQL?
- 10. Возможно ли переопределить поведение пути hashbang/shebang
- 11. Rails: Переопределить пути RESTful?
- 12. Можно ли перегрузить "?" оператор?
- 13. Можно ли переопределить обобщенную функцию?
- 14. Можно ли переопределить метод jsp_service()?
- 15. ZF2 - Можно ли переопределить завод?
- 16. Можно ли переопределить встроенную функцию?
- 17. Можно ли переопределить вызов инжектора?
- 18. Можно ли переопределить RLMObject -hash?
- 19. Можно ли переопределить скрытый метод?
- 20. Можно ли переопределить IIS? (7.0)
- 21. Можно ли снова переопределить объекты?
- 22. Можно ли переопределить std :: endl?
- 23. Можно ли переопределить поле типа?
- 24. Git - Можно ли создать новый удаленный репо из локального репо?
- 25. Переопределить перенаправленные пути
- 26. Можно ли переопределить страницу с другой?
- 27. Можно ли использовать скопированное git-репо?
- 28. Можно ли «разветвить» репо до определенной фиксации?
- 29. Возможно ли переопределить равный оператор для кортежей?
- 30. Переопределить оператор «для»
Очень интересное спасибо за исходный код, будет играть с ним. –