如何在 ReasonML 中创建一系列动作中间表达式(并避免创建元组)?
How to create a sequence of actions mid-expression in ReasonML (and avoid creating a tuple)?
如果给定不合适的参数,我想尽早退出函数 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 组合器。
我不明白使用
有什么问题
if (arg > limit) {
Js_Log("...");
42
} else {
//complex operations here
x + y
}
但如果你绝对必须挤进一个三元条件,你也可以使用花括号在那里形成一个代码块,通常在任何你可以放置表达式的地方:
arg > limit ? {Js.log("..."); 42} : helper()
虽然我通常会认为这是一种代码味道,但对于快速调试来说它会很方便。
如果给定不合适的参数,我想尽早退出函数 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 组合器。
我不明白使用
有什么问题if (arg > limit) {
Js_Log("...");
42
} else {
//complex operations here
x + y
}
但如果你绝对必须挤进一个三元条件,你也可以使用花括号在那里形成一个代码块,通常在任何你可以放置表达式的地方:
arg > limit ? {Js.log("..."); 42} : helper()
虽然我通常会认为这是一种代码味道,但对于快速调试来说它会很方便。