如何在 ReScript/ReasonML 中调用带单元的未柯里化函数?
How do you call an uncurried function with unit in 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(. 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 */
显然,这是重写中的一个已知问题。参见:https://github.com/rescript-lang/rescript-compiler/issues/3429
我也喜欢这个版本:
echo(. ignore())
这样我就不需要虚拟值解决方法
编辑:此版本现在也是文档的一部分:https://rescript-lang.org/docs/manual/latest/function#uncurried-function
假设我有一个未柯里化的函数,例如:
let echo(. a) = a;
我可以用大多数文字调用这个函数,例如:
echo(. 1)
echo(. "Hello")
但是当我尝试用 void 调用它时,出现错误:
echo(. ()) //This function has arity1 but was expected arity0
作为解决方法,我可以这样做:
let myArg = ()
echo(. myArg)
有没有办法避免这种情况?
看起来您正在尝试调用一个未柯里化的函数,该函数采用一个参数而不带任何参数,因为这就是 ()
的意思。它适用的唯一原因
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 */
显然,这是重写中的一个已知问题。参见:https://github.com/rescript-lang/rescript-compiler/issues/3429
我也喜欢这个版本:
echo(. ignore())
这样我就不需要虚拟值解决方法
编辑:此版本现在也是文档的一部分:https://rescript-lang.org/docs/manual/latest/function#uncurried-function