如何在ReasonML中创建表达式中间的动作序列(并避免创建元组)?

如果给定了不合适的参数,我想尽早退出某个函数。Javascript中的命令式解决方案很优雅:

arg=>{
	if(arg>limit) return 42;
	//perform complex operations
	return x+y
}

ReasonmL作为一种功能语言没有return,因此我将所有内容都填充为单个表达式:

arg=>{
    let helper=()=>{
        //complex operations here
        ; x+y
    }
    (arg>limit) ? 42 : helper()
}

现在,此方法有效,但我不想只返回42,而是要塞入Js.Log("!CORNER CASE!")中。我怎样才能做到这一点?在C语言中,我可以编写(arg>limit) ? (Js_Log("..."),42) : helper(),但是在ReasonmL中,这将成为一个元组并且无法编译。

OCaml可以begin printf "msg" ; 42 end做,但是分号对我不起作用,原因是:(Js.log("TEST");42)-无法编译!

或者,在ReasonmL中,我需要K组合器。

qq820066128 回答:如何在ReasonML中创建表达式中间的动作序列(并避免创建元组)?

我不明白仅使用它有什么问题

if (arg > limit) {
  Js_Log("...");
  42
} else {
  //complex operations here
  x + y
}

但是如果您绝对必须挤入三元条件,则也可以在其中使用花括号来形成代码块,通常在任何地方都可以放置表达式:

arg > limit ? {Js.log("..."); 42} : helper()

我通常会认为这是一种代码味道,但是对于快速调试而言,它很方便。

本文链接:https://www.f2er.com/2506926.html

大家都在问