Verse Wiki — 写给 UE6 时代的 Verse 互动手册
拓展 · EXTRA

换个老师再听一遍:Romero Blueprints 的 Verse 运算符篇

学一门新语言,同一个知识点听两位老师各讲一遍,盲区会小得多。知名 UE 教育者 Marcos Romero 的博客里有一篇系统的 Verse 运算符讲解,结论和第 9 课高度一致——这一页带你速览他的讲法,顺便用他的例子给「括号插队」再补一刀。

一、这位老师是谁,讲了什么

Marcos Romero 是 UE 社区里资历很深的教育者,他的「Romero Blueprints」博客陪伴了一代蓝图学习者,如今也系统地写起了 Verse。他的运算符篇把这些键位分成三大类过了一遍:算术(+ - * /)、关系(< <= > >= = <>)、逻辑(or and not)——分类方式和第 9 课几乎一致,但例子与措辞完全是另一套,正适合用来查漏。

最值得注意的是,他用自己的话得出了与本课相同的两个核心结论:其一,比较的结果是成功或失败,而不是 true/false;其二,用 ? 查询一个 logic 值,值为 false 时整个表达式就失败。两套教材、两种表述、同一个语义——当你从独立来源反复验证出同一条规则,基本就可以放心把它写进肌肉记忆了。这正是读社区教材的价值:交叉验证。

最值得注意的是,他用自己的话得出了与本课相同的两个核心结论:其一,比较的结果是「走通」或「走不通」,而不是 True / False;其二,用 ? 查询一个 logic(Boolean)值,值为 false 时这一步就走不通。两套教材、两种表述、同一个意思——当你从独立来源反复验证出同一条规则,基本就可以放心把它写进肌肉记忆了。这正是读社区教材的价值:交叉验证。

二、他的优先级表,和我们的对上了

Romero 在文中也给出了一张从高到低的优先级表:?not 排在最上层,其后依次是 * /+ -、比较运算符、andor,赋值排在最低。和第 9 课的速查表逐档对照,顺序完全一致——两张独立整理的表互为印证,你背的那张不会错。

「赋值排在最低」这条还顺手解释了一个日常现象:为什么 set Result = 5 * 2 + 4 总是先把右边整个算完、再把结果放进格子——因为等号右边的所有运算符档位都比赋值高,轮到赋值动手时,右边早已尘埃落定。

当然,老规矩仍然适用:个别相邻档位的精确次序,以官方《Verse Language Quick Reference》的完整表格为准;真实项目里遇到复杂表达式,直接加括号,把「谁先算」写在明面上。

三、两行代码看懂「括号插队」

Romero 用了一对极简的对照示例演示括号如何覆盖优先级,值得照抄进你的练习工程跑一遍:

priority_demo_device.verse
using { /Fortnite.com/Devices }
using { /UnrealEngine.com/Temporary/Diagnostics }

priority_demo_device := class(creative_device):

    var Result1:int = 0
    var Result2:int = 0

    OnBegin<override>()<suspends>:void =
        set Result1 = 5 * 2 + 4      # 先乘后加,得 14
        set Result2 = 5 * (2 + 4)    # 括号插队,得 30
        Print("Result1: {Result1}")
        Print("Result2: {Result2}")

读图翻译:BeginPlay 里两个 Set 节点分别算出 Result1、Result2,再用两个 Print String 打印。关键就差那对括号:上面一条 5 * 2 + 4 没括号,下面一条给「2 + 4」套了括号,先算它。

同样的三个数字、同样的两个运算符,一对括号让结果从 14 变成 30。* 的档位比 + 高,所以 5 * 2 + 4 是「先乘后加」;而 ( ) 站在优先级之巅,谁被它圈住谁先算。读别人的教材读到这种「一眼见效」的小例子,不妨都收进自己的例子库——将来给队友讲优先级,一行对照胜过十句解释。

四、读表衍生的两个常见坑

坑一:not 只咬住紧跟它的那一口。两张表里 not 都站在最上层,档位高意味着它结合得紧——not A and B 会被解析成 (not A) and B,而不是 not (A and B)。想否定整个组合条件,必须亲手写成 not (A and B)。顺带复习第 9 课的提醒:not 的操作数处于失败上下文,其中的效果永远会被回滚,在里面写 set 不会留下任何痕迹。

坑一:not 只咬住紧跟它的那一口。两张表里 not 都站在最上层,档位高意味着它结合得紧——not A and B 会被理解成 (not A) and B,而不是 not (A and B)。想否定整个组合条件,必须亲手写成 not (A and B)。顺带复习第 9 课的提醒:not 里面那段处在「能走不通」的判断里,其中做过的改动永远会被回滚,在里面写 set(Set 节点)不会留下任何痕迹。

坑二:and 与 or 的档位比比较运算符低。这一条其实是好消息——if (A > 0 and B > 0): 会按直觉解析成两个比较各自先算,再交给 and,不必像某些语言那样给每个比较单独套括号。但反过来看,一旦条件里混进三四个 andor(注意 and 又比 or 高一档),光靠背表来读代码就开始考验队友的耐心了。Romero 与官方文档在这一点上口径一致:复杂条件直接加括号,别让读代码的人替你查表。

坑二:and 与 or 的档位比比较运算符低。这一条其实是好消息——if (A > 0 and B > 0): 会按直觉理解成两个比较各自先算,再交给 and,不必像某些语言那样给每个比较单独套括号。但反过来看,一旦条件里混进三四个 andor(注意 and 又比 or 高一档),光靠背表来读这一串条件就开始考验队友的耐心了。Romero 与官方文档在这一点上口径一致:复杂条件直接加括号,别让读的人替你查表。

五、随堂小测 ★

set Result = 2 + 3 * 4 执行后,Result 的值是多少?

本文整理自 Marcos Romero 的博客文章:UEFN Verse: Operators — Romero Blueprints ↗