You need to enable JavaScript to run this app. 如何在Jekyll/Liquid中实现(A and B) or (not C)及咨询运算规则
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jekyll/Liquid中实现(A and B) or (not C)及咨询运算规则

目标逻辑的Liquid实现方式

Liquid 没有采用C、JS体系下的符号逻辑运算符(如&&、||、!),全部使用英文关键字作为逻辑判断符,你提到的(A and B) or (not C)逻辑可以直接带括号书写,不需要做语法转换:

{% if (A and B) or (not C) %}
  满足判断条件时渲染的内容
{% endif %}

实际项目中的使用示例:将A/B/C替换为真实的站点或页面变量,例如:

{% if page.show_notice and site.features.enable_notice or not site.maintenance_mode %}
  渲染站点公共通知
{% endif %}
Liquid 运算符全局规则

优先级规范

所有运算符按照优先级从高到低排序,优先级越高的子表达式会被优先计算,默认优先级下完全不需要考虑书写顺序的影响:

  • 最高级:圆括号 (),可完全覆盖默认优先级,强制调整任意运算顺序
  • 一元运算符:not(逻辑非),所有一元运算符的优先级都高于二元运算符
  • 算术运算符:*、/、%(取模)
  • 算术运算符:+、-
  • 比较运算符:>、>=、<、<=
  • 比较运算符:==、!=、contains
  • 二元逻辑运算符:and
  • 最低级:二元逻辑运算符or

高频踩坑点:and的优先级高于or,如果不加括号直接写if A or B and C,实际运算逻辑不是新手直觉里从左到右计算的(A or B) and C,而是等价于A or (B and C),和预期逻辑偏差极大。

结合方向规范

  • 除一元运算符not为右结合外,其余所有二元运算符(覆盖逻辑类、比较类、算术类)全部为左结合,即同级运算从表达式最左端开始,依次向右计算
  • 左结合的实际影响:例如同优先级连续比较表达式A > B < C == D,计算流程是先算最左侧的A > B得到布尔结果,再将该结果和C做<比较,最后将新的布尔结果和D做==判断
  • 右结合的实际影响:由于not是右结合,连续取反的表达式not not A会从最右侧开始计算,先算not A得到布尔值,再对该值取反,等价于not (not A)

内容的提问来源于stack exchange,提问作者jpc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 07:54:01