Rebol2 / Посмотреть вопрос: Как работает функция макета в Rebol2? - PullRequest
1 голос
/ 24 апреля 2020

Некоторые функции, используемые в функции макета, по-видимому, не существуют, но макет работает нормально. Но когда вы попытаетесь заменить функцию макета на адаптированную версию, содержащую некоторые отладочные операторы, функции и необъявленные переменные немедленно вызовут ошибку.

Функции BIND? и ОБЯЗАТЕЛЬНО? не показывать результаты, например, для использованной функции TRACK, поэтому никакой дополнительной информации при их использовании нет. Особый интерес к функциям do-facets и grow-facets.

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Вот два способа создания анонимных контекстов в Rebol 2:

context [
    semi-hiddend-function: does [print "ok"]
    set 'non-hidden-function does [semi-hiddend-function]
]

use [semi-hiddend-function] [
    semi-hiddend-function: does [print "ok"]
    set 'non-hidden-function does [semi-hiddend-function]
]

В первой форме вы можете достичь контекста слова semi-hiddend-function:

>> probe bound? first body-of :non-hidden-function
make object! [
    semi-hiddend-function: func [][print "ok"]
]

Но во второй форме вы не можете:

>> probe bound? first body-of :non-hidden-function
make object! [
]

Я вижу, что многие ребулеры используют одну из вышеперечисленных форм не только для того, чтобы скрыть, но и сохранить основную функцию чистой и отдельной.

Здесь я также добавляю функции, которые вы хотели бы видеть, немного длинны, поэтому я сжал и расшифровал:

Вы можете просто вставить строку ниже в консоль, скопировать текст ниже и выполнить строку для его распаковки: write clipboard:// decompress debase trim/lines read clipboard://

eJyNVrty6zYQrcmvWKuJPWNFqXkn0Uyq29zbpeKwgMElhRgCOABoRfn67C7Ah5xkksJje3dxcPZ1w
N4fB6UxxQaG2Wlo6+rw62xsD2/W63fwA0wqqCsmDBGeletBpRTM25wQbj708QVuF2MRnE+g4MP0Yg
YfIKa7xR8PdRUn1DFHZ2OEE6ErC/luMAmvdUd3L1y0n+7QdnWVsVsGT8rYMwhWxzwrPkW0TYgpm9k
2QMR05LvO0HAEtG8B1TthVWjSBQM8OMnMh5Sj+wZD6VEGx0xVAsRWSLOh2+BWtsZFDGlJptwiiBxV
KWuhzZCCtqF3m188gnD85O/a5I/WZHvhsDi79u88Tt7Z+0JGsuRA+pEaNeDwj7VeZA7Yz5pKnJtU/
rugKmyo1vCFm4sLpAoI+KHsrBL2FBnwqe7qegz+9mmWHN4oely7PSnqFSS6n9K7qpFKqr31gevC9Z
WRi0DYkK6TNJkgTgsoQ9V19eV4hG+zTUbsQPfOE7HSGicm9ByTSkYzyozxpa7k1gZAW1RBhkoYPFg
yjWZnEUYPMZndPibnsLPQMR+4nZI194ZYLCMq9KkLN5P05dTjoCgJSPcJzydpLect/WTGTwDQqmlC
GotcN3LLPBiXcEQK+Gd3pO104+bN5V68aZ4sPm3Qpf6LW3Lc3HmUtrbkqTeCsELk3i3eOVh2/otXK
ra7vkzB4tYXlRPntr/jXfsem9Vr/Wj0U/H2Kime5duJ+72L6lETKpHYha3Zmyuu+OHhGHdAXHkl1+
UVceAF5SN5M2k2m7zJm61hnOVINbtkeKdpC5Lx7lwmQA7K+sl482ItITB4a/2tqOQrjDOpLjUa+wL
J09NA7zcoWNYrR3Qr3Y3fXk+adbyqVQl/gl9+JokfSDLPAjncjjSeF2iJGs2Zp8V3stRl+cvx/5fg
Evyf1IuM7Yhlrc8HBS8vFIZA78rhm4mRZpyN8xUdKa8Ph9yCFaiinCgFuYkzL8CTjyaZDzyvaVPKA
6IoDmynq4edXVhSVdBGfCUV/oEkx4F/+x11gmdiRZXCF4izvoAiQfNEi6z8eG6g1JwNF9qresf8To
yPZPkN4oKf8lhtZ7qNTP3pj/K7I47f5SmWRys/xrluJsoj7WiosH8Fqsci9zc/04t/UR8IWs3jhci
kegXdHppS/99cQO1HZ/7Efvs8aA7MPb81XdHpr/TBQCSuLNflcXiFIn35JTGO2mJYuIfgr2vmTZZ+
OXhiCQMpjojZ3hWJQ3aJCu5drDzZJRq0d4nsiCsL0N4niii+rI17X/4mYl/WxLr7C5ZY7idACQAA
1 голос
/ 24 апреля 2020

Вы можете найти определения в исходных файлах SDK, например,

track: func [blk] [if verbose [print blk]]

в view-vid.r

Здесь вспомогательная функция для получения определения / источника слова / функция в неизвестном контексте и, например, без доступа к SDK

find-anon: func [ words fn /local   ] [ 
    foreach word words [
        if word = fn [set :fn probe get word halt]
        if block? word [
            find-anon word fn
        ]
    ]
]

find-anon second :layout 'grow-facets
help grow-facets
...