PureScript是否支持三元条件运算符?不支持时如何模拟实现?
PureScript三元条件运算符问题解答
- PureScript原生语法不支持类C风格的
?:三元条件运算符,该语法特性并未被纳入官方核心语法规范。 - 你可以通过现有语言构造完全模拟三元运算符的等价功能,常用方案有两种:
- 直接使用内置
if/else表达式
PureScript中的if/else本身是有返回值的表达式,而非语句,可直接替代三元运算符使用,无需额外封装:
这是官方推荐的标准替代方案,和三元运算符的执行逻辑、类型约束完全一致,要求两个分支的返回值类型必须相同。-- 等价于JS的 2 > 1 ? "条件成立" : "条件不成立" let res = if 2 > 1 then "条件成立" else "条件不成立" - 自定义中缀运算符模拟三元语法
如果你更偏好类三元的简写形式,可以自己定义中缀运算符实现语法糖:
该实现底层依然基于-- 定义优先级为1的右结合中缀运算符 infixr 1 ?| (?|) :: forall a. Boolean -> a -> a -> a (?|) cond trueVal falseVal = if cond then trueVal else falseVal -- 使用示例 let res = 2 > 1 ?| "条件成立" $ "条件不成立"if/else表达式,仅做了语法层面的封装。
- 直接使用内置
内容的提问来源于stack exchange,提问作者Peyman Mohamadpour
相关产品推荐
相关产品推荐

