[英]How do you call an uncurried function with unit in ReScript/ReasonML?
假設我有一個未經處理的 function ,例如:
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
看起來您正在嘗試調用一個非咖喱 function ,它采用一個沒有 arguments 的參數,因為這就是()
的意思。 它與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 */
顯然,這是腳本中的一個已知問題。 參見: https://github.com/rescript-lang/rescript-compiler/issues/3429
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.