微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

你如何在 ReScript/ReasonML 中调用带有单元的非柯里化函数?

如何解决你如何在 ReScript/ReasonML 中调用带有单元的非柯里化函数?

我有一个非柯里化的函数,比如:

let echo(. a) = a;

我可以用大多数文字调用这个函数,例如:

echo(. 1)
echo(. "Hello")

但是当我尝试使用 void 调用它时,出现错误

echo(. ()) //This function has arity1 but was expected arity0

作为一种解决方法,我可以这样做:

let myArg = ()
echo(. myArg)

有没有办法避免这种情况?

解决方法

我也喜欢这个版本:

echo(. ignore())

那样我就不需要虚拟值解决方法

编辑:此版本现在也是文档的一部分:https://rescript-lang.org/docs/manual/latest/function#uncurried-function

,

看起来您正在尝试调用一个非柯里化函数,该函数接受一个没有参数的参数,因为这就是 () 的意思。它适用的唯一原因 在这种情况下,echo(. myArg) 是编译器声明一个名为 myArg 的未初始化变量并将其传递给 echo。 编辑:您可以在 re-script playground here

处了解我的意思
let echo = (. a) => a;


let k =() => echo(. "String")
let myArg = ()
let s =() => echo (. myArg)

生成

// Generated by ReScript,PLEASE EDIT WITH CARE
'use strict';


function echo(a) {
  return a;
}

function k(param) {
  return echo("String");
}

function s(param) {
  return echo(undefined);
}

var myArg;

exports.echo = echo;
exports.k = k;
exports.myArg = myArg;
exports.s = s;
/* No side effect */

,

显然,这是 rescript 中的一个已知问题。请参阅:https://github.com/rescript-lang/rescript-compiler/issues/3429

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。