Rebol2/View 问题:Rebol2 中的布局功能是如何工作的?

Rebol2/View question: How does the layout function in Rebol2 work?

'layout 函数中使用的某些函数显然不存在,但 'layout 工作正常。但是当你试图用包含一些调试语句的改编版本替换 'layout 函数时,函数和未声明的变量将立即导致错误。

绑定函数?绑定?不要显示结果,例如,使用的 TRACK 函数,因此使用这些函数没有额外的信息。 对 do-facets 和 grow-facets 函数特别感兴趣。

您可以在sdk的源文件中找到定义 例如

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

可见-vid.r

这是一个辅助函数,用于在未知上下文中获取 word/function 的 definition/source,例如无法访问 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

这里有两种在 Rebol 2 中创建匿名上下文的方法:

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

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

在第一种形式中,您可能会到达单词的上下文 semi-hidden-function:

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

但在第二种形式中你可能不会:

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

我看到许多 Rebolers 使用上述形式之一,不仅是为了隐藏,而且是为了保持主要功能的清洁和分离。

这里我也加上大家喜欢看的功能,有点长所以压缩&enbase:

您只需将以下行粘贴到控制台,复制以下文本并执行该行即可解压缩: 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