从 Red/System 访问运行时函数

Accessing runtime functions from Red/System

所以在尝试在 Red 和 Red/System 之间来回编组值时出现了这个问题。我想访问传递给例程的对象的内部结构。

我注意到在 Red Runtime 中有一些函数可以在对象上下文中处理诸如获取值、获取词等的事情。运行时源中有一个名为 object.reds

的文件

我如何使用这些?我可以使用这些吗?有没有一种方法可以访问它们而无需将(已经包含的)运行时的副本重新包含(并通过扩展编译)到我的应用程序中?

您可以立即从 Red/System 例程中调用这些。不需要额外的包含。这是一个简单的例子:

Red []

get-object-size: routine [
    obj [object!]
    return: [integer!]
] [
    object/get-size obj
]

print get-object-size object [foo: 42 bar: 99]

当你编译和运行这个时,它最终会输出2

一般来说,对于每个 Red 数据类型,源代码中都有一个 Red/System 文件(参见 repository),它定义了一个 context,其名称与该数据类型相同,但没有!context!function! 除外,其中 _ 是前缀以避免名称冲突)。在这样的 context 中,有针对该类型值的每个 actions 定义的函数,以及可能在例程中有用的辅助函数。但是,我想辅助功能,不依赖于语言规范,不能保证随着实现的发展而存在。因此,我会告诫不要过度依赖它们。