给定一个脚本,如下所示,它还没有编译,我如何#call
在 Red/System 中使用我的 Red 函数?
Red []
pff: function [a [string!] ][print a]
#system [
#call [pff "hello"]
]
存在类型不匹配。您需要做什么才能将字符串转换为正确的 Red/System 数据类型?
给定一个脚本,如下所示,它还没有编译,我如何#call
在 Red/System 中使用我的 Red 函数?
Red []
pff: function [a [string!] ][print a]
#system [
#call [pff "hello"]
]
存在类型不匹配。您需要做什么才能将字符串转换为正确的 Red/System 数据类型?
您需要调用 Red 运行时 API 来执行转换。Red 运行时 API 尚未记录,因此您必须阅读代码或询问少数熟悉它的人之一。(我两者都做了一点)。
我写了一个函数来转换一个红色的字符串!到 UTF-8 编码的红色/系统 c 字符串!,它在github 上。
为了扩展彼得的正确答案,在这种特殊情况下,您需要将 c 字符串内化为红色字符串!,使用string/load
,如下所示:
Red []
pff: function [a [string!] ][print a]
#system [
s: "hello"
hello: string/load s 1 + length? s UTF-8
#call [pff hello]
]
笔记:
Red/System 的字符串现在只是 ASCII,所以你需要指定 UTF-8 作为源编码格式。
您需要传递占终端 NUL 的 c 字符串的大小(因此是+ 1
)。
内部 API 没有记录,因为它没有最终确定。如果您需要任何相关信息,请随时在此处或我们的其他沟通渠道询问。