如何将pipeline执行结果传入switch语句?
解决方案
你的问题出在变量绑定和管道操作的顺序上,以下是两种正确的写法:
方式一:先赋值再匹配
先把管道操作的结果绑定到变量x,再对x进行switch匹配:
let onWithOptions = (~key: string, eventName, options: options, decoder) => onCB(eventName, key, event => { ... let x = event |> Tea_json.Decoder.decodeEvent(decoder); switch x { | Ok(a) => Some(a) | Error(_) => None } })
方式二:用匿名函数包裹switch
利用管道操作的特性(将左侧值作为右侧函数的第一个参数传入),把switch逻辑放在匿名函数里:
let onWithOptions = (~key: string, eventName, options: options, decoder) => onCB(eventName, key, event => { ... event |> Tea_json.Decoder.decodeEvent(decoder) |> (x => switch x { | Ok(a) => Some(a) | Error(_) => None } ) })
错误原因说明
- 第一种尝试里,switch中的
x从未被定义,编译器无法识别; - 第二种尝试里,你试图在绑定
x的同时就用它做匹配,但此时x还未完成绑定,属于无效引用。
内容的提问来源于stack exchange,提问作者Fer iel
相关产品推荐
相关产品推荐

