gpt4 book ai didi

ffi - 具有固定字符串值的配置的 ReasonML 绑定(bind)函数

转载 作者:行者123 更新时间:2023-12-04 22:02:37 25 4
gpt4 key购买 nike

比方说,我在 Javascript 中有这个函数,它可以根据适当的配置生成字符串:

function func(config) {
// ...
}

另外,我们假设 config 变量具有如下结构(所有这些都不能提供给函数调用):

{
"color": string, // can be: "blue", "red", "green"
"number": int, // can be: any number
"other": string, // can be: "x", "y"
}

如何为此创建适当的绑定(bind)?我坚持:

[@bs.deriving abstract]
type options = {
[@bs.optional]
color: [@bs.string] [ | `blue | `red | `green ]
[@bs.optional]
number: int,
[@bs.optional]
other: [@bs.string] [ | `x | `y ]
}

[@bs.module]
external func: options => string = "func";

但是尝试这样使用时它不起作用:

let config = MyModule.config(
~color=`blue,
~number=123,
~other=`x
);

let value = MyModule.func(config);

colorother 值是整数,不是字符串。

最佳答案

这是一个用于命名参数(具有可选字段的对象)的 JavaScript 习语的情况,需要适应 OCaml/ReasonML 习语(具有实际标记参数的函数)。您将分三步完成此操作。第 1 步,如 Glenn 所示,为配置定义一个外部:

type config;
[@bs.obj] external config: (
~color:[@bs.string] [`blue | `red | `green]=?,
~number:int=?,
~other:[@bs.string] [`x | `y]=?,
unit,
) => config = "";

第 2 步,使用配置对象的 JavaScript 样式绑定(bind)到 JavaScript 函数:

[@bs.val] external func: config => string = "";

第 3 步,将 JavaScript 函数绑定(bind)包装在带有标记参数的 OCaml 惯用函数中:

let func(~color=?, ~number=?, ~other=?, ()) = ()
|> config(~color?, ~number?, ~other?)
|> func;

你可以这样使用它:

let result = func(~color=`blue, ());

关于ffi - 具有固定字符串值的配置的 ReasonML 绑定(bind)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55325408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com