此文档页面特定于 Scala 2 中提供的功能,这些功能已在 Scala 3 中移除或被替代方案取代。除非另有说明,本页面中的所有代码示例均假设你使用的是 Scala 2。
Denys Shabalin 实验性
表达式
| |
准引号 |
类型 |
| 空 |
q"" |
EmptyTree |
| 文本 |
q"$value" |
文本 |
| 标识符 |
q"$tname" 或 q"name" |
Ident |
| 选择 |
q"$expr.$tname" |
Select |
| 超级选择 |
q"$tpname.super[$tpname].$tname" |
Select |
| This |
q"$tpname.this" |
This |
| 应用程序 |
q"$expr(...$exprss)" |
Apply |
| 类型应用程序 |
q"$expr[..$tpts]" |
TypeApply |
| 分配 |
q"$expr = $expr" |
赋值,赋值或命名参数 |
| 更新 |
q"$expr(..$exprs) = $expr" |
树 |
| 返回 |
q"return $expr" |
返回 |
| 抛出 |
q"throw $expr" |
抛出 |
| 归属 |
q"$expr: $tpt" |
类型化 |
| 带注释 |
q"$expr: @$annot" |
带注释 |
| 元组 |
q"(..$exprs)" |
树 |
| 块 |
q"{ ..$stats }" |
块 |
| 如果 |
q"if ($expr) $expr else $expr" |
如果 |
| 模式匹配 |
q"$expr match { case ..$cases }" |
匹配 |
| 尝试 |
q"try $expr catch { case ..$cases } finally $expr" |
尝试 |
| 函数 |
q"(..$params) => $expr" |
函数 |
| 部分函数 |
q"{ case ..$cases }" |
匹配 |
| While 循环 |
q"while ($expr) $expr" |
LabelDef |
| Do-While 循环 |
q"do $expr while ($expr)" |
LabelDef |
| For 循环 |
q"for (..$enums) $expr" |
树 |
| For-Yield 循环 |
q"for (..$enums) yield $expr" |
树 |
| 新建 |
q"new { ..$earlydefns } with ..$parents { $self => ..$stats }" |
树 |
| XML 字面量 |
本机不支持 |
树 |
类型
| |
准引号 |
类型 |
| 空类型 |
tq"" |
类型树 |
| 类型标识符 |
tq"$tpname" 或 tq"Name" |
Ident |
| 单例类型 |
tq"$ref.type" |
单例类型树 |
| 类型投影 |
tq"$tpt#$tpname" |
从类型树中选择 |
| 类型选择 |
tq"$ref.$tpname" |
Select |
| 超类型选择 |
tq"$tpname.super[$tpname].$tpname" |
Select |
| 此类型选择 |
tq"this.$tpname" |
Select |
| 应用类型 |
tq"$tpt[..$tpts]" |
应用类型树 |
| 带注释类型 |
tq"$tpt @$annots" |
带注释 |
| 复合类型 |
tq"..$parents { ..$defns }" |
复合类型树 |
| 存在类型 |
tq"$tpt forSome { ..$defns }" |
存在类型树 |
| 元组类型 |
tq"(..$tpts)" |
树 |
| 函数类型 |
tq"(..$tpts) => $tpt" |
树 |
模式
| |
准引号 |
类型 |
| 通配符模式 |
pq"_" |
Ident |
| 字面量模式 |
pq"$value" |
文本 |
| 绑定模式 |
pq"$name @ $pat" |
绑定 |
| 提取器模式 |
pq"$ref(..$pats)" |
应用,取消应用 |
| 类型模式 |
pq"_: $tpt" |
类型化 |
| 备选模式 |
pq"$first │ ..$rest" |
备选 |
| 元组模式 |
pq"(..$pats)" |
应用,取消应用 |
| XML 模式 |
本机不支持 |
树 |
定义
| |
准引号 |
类型 |
| Val |
q"$mods val $tname: $tpt = $expr" 或 q"$mods val $pat = $expr" |
ValDef |
| Var |
q"$mods var $tname: $tpt = $expr" 或 q"$mods var $pat = $expr" |
ValDef |
| Val 模式 |
q"$mods val $pat: $tpt = $expr" |
树 |
| Var 模式 |
q"$mods var $pat: $tpt = $expr" |
树 |
| 方法 |
q"$mods def $tname[..$tparams](...$paramss): $tpt = $expr" |
DefDef |
| 辅助构造函数 |
q"$mods def this(...$paramss) = this(..$argss)" |
DefDef |
| 类型 |
q"$mods type $tpname[..$tparams] = $tpt" |
TypeDef |
| 类 |
q"$mods class $tpname[..$tparams] $ctorMods(...$paramss) extends { ..$earlydefns } with ..$parents { $self => ..$stats }" |
ClassDef |
| 特征 |
q"$mods trait $tpname[..$tparams] extends { ..$earlydefns } with ..$parents { $self => ..$stats }" |
TraitDef |
| 对象 |
q"$mods object $tname extends { ..$earlydefns } with ..$parents { $self => ..$body }" |
ModuleDef |
| 包 |
q"package $ref { ..$topstats }" |
PackageDef |
| 包对象 |
q"package object $tname extends { ..$earlydefns } with ..$parents { $self => ..$stats }" |
PackageDef |
辅助
| |
准引号 |
类型 |
| 导入 |
q"import $ref.{..$sels}" |
导入 |
| 案例子句 |
cq"$pat if $expr => $expr" |
CaseDef |
| 生成器枚举器 |
fq"$pat <- $expr" |
树 |
| 值定义枚举器 |
fq"$pat = $expr" |
树 |
| 保护枚举器 |
fq"if $expr" |
树 |
缩写
未引用前缀表示以下内容
name: Name, tname: TermName, tpname: TypeName
value: T 其中 T 是与给定文字对应的值类型(例如 Int、Char、Float 等)
expr: Tree 表达式树
tpt: Tree 类型树
pat: Tree 模式树
defn: Tree 定义树
earlydefn: Tree 早期定义树(val 或 类型定义)
self: Tree 自我定义树(即 val 定义)
stat: Tree 语句树(定义、表达式 或 导入)
topstat: Tree 顶级语句树(类、特征、包、包对象 或 导入)
enum: Tree for 循环 枚举器
param: Tree 值参数树(即 val 定义)
tparam: Tree 类型参数树(即 类型定义)
parent: Tree 模板 父级
sel: Tree 导入 选择器树
每当名称有后缀 s 时,表示它是某个内容的 List。 ss 表示 List of Lists。因此,例如 exprss 表示 List of Lists of expressions。