簡體   English   中英

你如何用 ReScript/ReasonML 中的單位來調用未咖喱化的 function?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM