Я хочу выйти из функции раньше, если даны неподходящие аргументы. Императивное решение в 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
, но точка с запятой не работает для меня в Reason: (Js.log("TEST");42)
- не компилируется!
В качестве альтернативы мне нужен K-комбинатор в ReasonML.