2

假设我有一个 uncurried 函数,例如:

let echo(. a) = a;

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

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

但是当我试图用 void 调用它时,我得到一个错误:

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

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

let myArg = ()
echo(. myArg)

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

4

3 回答 3

3

我也喜欢这个版本:

echo(. ignore())

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

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

于 2021-01-03T10:27:08.957 回答
1

看起来您正在尝试调用一个非 curried 函数,该函数接受一个不带参数的参数,因为这()意味着正确。它使用的唯一原因 echo(. myArg)是在这种情况下,编译器声明了一个未初始化的变量myArg ,并将其传递给 echo。编辑:您可以在这里查看我在re-script playground 的意思

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 */

于 2020-12-29T18:57:27.493 回答
0

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

于 2020-12-31T15:51:18.770 回答