从 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
定义的函数,以及可能在例程中有用的辅助函数。但是,我想辅助功能,不依赖于语言规范,不能保证随着实现的发展而存在。因此,我会告诫不要过度依赖它们。
所以在尝试在 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
定义的函数,以及可能在例程中有用的辅助函数。但是,我想辅助功能,不依赖于语言规范,不能保证随着实现的发展而存在。因此,我会告诫不要过度依赖它们。