Rebol2View的问题。Rebol2的布局功能是如何工作的?

问题描述 投票:0回答:1

'layout函数中使用的一些函数显然是不存在的,然而'layout却能正常工作。但是当你试图用一个包含一些调试语句的改编版本来替换'layout函数时,这些函数和未声明的变量会立即引起错误。

例如,函数BIND?和BOUND?不会显示使用过的TRACK函数的结果,所以使用这些函数不会有额外的信息.特别感兴趣的是do-facets和grow-facets函数。

view rebol red
1个回答
2
投票

这里有两种方式在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使用上述形式之一,不仅是为了隐藏,而且是为了保持主要功能的干净和独立。

在这里,我也添加了你想看到的功能,它有点长,所以我压缩了& enbased。

你可以简单的把下面的一行粘贴到控制台,复制下面的文字并执行这一行来解压。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
投票

你可以在sdke.g的源文件中找到定义。

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

view-vid.r中的定义。

这里有一个辅助函数,用于在未知的上下文中,例如在没有访问sdk的情况下,获取一个word函数的定义源。

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
© www.soinside.com 2019 - 2024. All rights reserved.