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

View Rebol2/视图问题:Rebol2中的布局功能是如何工作的?,view,rebol,rebol2,View,Rebol,Rebol2,“布局函数”中使用的某些函数显然不存在,但“布局”工作正常。但是,当您试图用包含一些调试语句的修改版本替换“layout”函数时,这些函数和未声明的变量将立即导致错误 功能绑定?和束缚?例如,不显示所用轨迹函数的结果,因此使用这些函数没有额外的信息。 对do facets和grow facets函数特别感兴趣。您可以在sdk的源文件中找到定义 e、 g 查看视频r 这里是一个helper函数,用于在未知上下文中获取单词/函数的定义/源,例如,不访问sdk find-anon: func [ wo

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

功能绑定?和束缚?例如,不显示所用轨迹函数的结果,因此使用这些函数没有额外的信息。
对do facets和grow facets函数特别感兴趣。

您可以在sdk的源文件中找到定义 e、 g

查看视频r

这里是一个helper函数,用于在未知上下文中获取单词/函数的定义/源,例如,不访问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

您可以在sdk的源文件中找到定义 e、 g

查看视频r

这里是一个helper函数,用于在未知上下文中获取单词/函数的定义/源,例如,不访问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]
]
在第一种形式中,您可以访问单词
半隐藏函数的上下文:

>> 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! [
]
我看到许多重沸器使用上述形式之一,不仅是为了隐藏,而且是为了保持主功能干净和独立

这里我还添加了您喜欢的函数,它有点长,所以我压缩了&enbase:

您只需将下面的行粘贴到控制台,复制下面的文本并执行该行即可解压:
write clipboard://解压缩debase trim/行读取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

以下是在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]
]
在第一种形式中,您可以访问单词
半隐藏函数的上下文:

>> 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! [
]
我看到许多重沸器使用上述形式之一,不仅是为了隐藏,而且是为了保持主功能干净和独立

这里我还添加了您喜欢的函数,它有点长,所以我压缩了&enbase:

您只需将下面的行粘贴到控制台,复制下面的文本并执行该行即可解压:
write clipboard://解压缩debase trim/行读取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

此答案假设您有权访问sdk。它没有完全解释重新定义布局函数时函数不再可用的原因。您知道(匿名)上下文和设置“函数”吗?直到Endo回答我的问题时,我才知道。此回答假设您可以访问sdk。它没有完全解释重新定义布局函数时函数不再可用的原因。您知道(匿名)上下文和设置“函数”吗?直到Endo回答我的问题,我才知道。我没有检查源代码如何隐藏面,我只是假设它与上面的一样,并以此进行解释。但是你也可以在第二个例子中展示半隐藏函数的定义。谢谢你,Endo,这非常有用@我很高兴它起到了作用。我没有检查源代码如何
使facets
&
使facets
隐藏,我只是假设它与上面一样,并解释它。但是你也可以在第二个示例中显示半隐藏函数的定义谢谢你Endo,这非常有用@我很高兴这有帮助。