1

给定一个脚本,如下所示,它还没有编译,我如何#call在 Red/System 中使用我的 Red 函数?

Red []

pff: function [a [string!] ][print a]  

#system [
    #call [pff "hello"]    
]

存在类型不匹配。您需要做什么才能将字符串转换为正确的 Red/System 数据类型?

4

2 回答 2

1

您需要调用 Red 运行时 API 来执行转换。Red 运行时 API 尚未记录,因此您必须阅读代码或询问少数熟悉它的人之一。(我两者都做了一点)。

我写了一个函数来转换一个红色的字符串!到 UTF-8 编码的红色/系统 c 字符串!,它在github 上

于 2013-12-23T22:44:21.797 回答
1

为了扩展彼得的正确答案,在这种特殊情况下,您需要将 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 没有记录,因为它没有最终确定。如果您需要任何相关信息,请随时在此处或我们的其他沟通渠道询问。

于 2015-05-23T04:22:17.507 回答