rebol - VID 布局 Pane 支持多个人脸创建 [rebol2]

标签 rebol rebol2

请考虑这个简单的 rebol2 代码来说明我的问题:

REBOL []
a: make face [
    offset: 0x0
    color: yellow
    size: 20x20
]
b: make face [
    offset: 0x0
    color: red
    size: 60x60
    pane: reduce [
        make a [offset: 0x0]
        make a [offset: 10x10]
        make a [offset: 10x20]
    ]
]
view layout [
    box 200x200 white with [
        pane: reduce [
            make b [offset: 0x30] ;; one 'instance' of b
        ]
    ]
]

这里的要点是布局(或面)能够在其 Pane 块内以这样的方式显示一堆面,即可以多次创建同一个面(在这种情况下为 b)。显示的代码运行良好,唯一的实例(让我这样称呼它)b按原样显示。

但是现在假设我更改了代码,所以我有 2 个 b 的实例。 :
view  layout [
    box 200x200 white with [
        pane: reduce [
            make b [offset: 0x30]
            make b [offset: 0x10]
        ]
    ]
]

此时我收到错误
** Script Error: Face object reused (in more than one pane): none
** Where: view
** Near: show scr-face
if new [do-events]

从我在这里推测的消息中,脸b不知何故被重用并弄乱了我正在努力实现的目标。我已经对此进行了大量研究,并且在某些时候我发现可以通过克隆(使用 make )要传递给 pane 的脸来绕过它。 ;这就是我认为我正在做的事情,但根本没有成功。

鉴于这种情况,我的问题是:我该如何解决这个问题? rebol2 可以提供这种“面部实例化”,还是最好在 rebol2 之外尝试其他东西(也许是 rebol3)?

任何帮助将不胜感激。

最佳答案

Rebol2 绝对可以做到这一点。

当您第二次 MAKE b 时,您使用的是 a 的相同实例。那就是问题所在。

您可以编写一个函数来创建必要的面并将它们附加到一个块中并返回。
不要忘记每次都创建一个(第一张脸)。

此外,检查文档中的迭代面。

在这里,我添加了一个示例:

REBOL []
make-pane: func [ofst [pair! block!] /local a b faces] [
    a: make face [
        offset: 0x0
        color: yellow
        size: 20x20
    ]
    faces: copy []
    either block? ofst [
        foreach o ofst [
            append faces make a [offset: o]
        ]
    ] [
        append faces make a [offset: ofst]
    ]
    b: make face [
        offset: 0x0
        color: red
        size: 60x60
        pane: faces
    ]
]

view  layout [
    box 200x200 white with [
        pane: make-pane [5x30 0x10 20x5]
    ]
]

您可以更改函数以获得更多参数来更改颜色和其他方面。

关于rebol - VID 布局 Pane 支持多个人脸创建 [rebol2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29933559/

相关文章:

module - 如何在模块内使用模块?

rebol - `context` 和 `object` 和有什么区别?

html - 使用 REBOL 在文件中查找/替换跨行的字符串

http - 在 Rebol 中读取大型二进制文件失败

rebol - 字面词的类型

rebol - R3 如何使用脚本头的 Needs 字段?对命名空间有什么影响吗?

redis - "glob"样式模式是否应保留为字符串!还是有更聪明的方法?

string - 将值保存到 block 而不是表示它的单词标签

html - 如何自定义 Power-Mezz 的 HTML 过滤器?

Rebol 2 端口绑定(bind)到多个 IP