Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Cs Summary Reflection
提交
714c4cb3
C
Cs Summary Reflection
项目概览
梦境迷离
/
Cs Summary Reflection
10 个月 前同步成功
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Cs Summary Reflection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
714c4cb3
编写于
6月 15, 2020
作者:
梦境迷离
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
abd472c0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
12 addition
and
12 deletion
+12
-12
docs/_posts/Scala/2020-06-14-Scala-marco介绍.md
docs/_posts/Scala/2020-06-14-Scala-marco介绍.md
+12
-12
未找到文件。
docs/_posts/Scala/2020-06-14-Scala-marco介绍.md
浏览文件 @
714c4cb3
...
...
@@ -109,12 +109,6 @@ define int main() {
准引用是一种简洁的表示法,使您可以轻松地操作Scala AST 语法树。
## 关于 Context
-
Context 封装了一个编译时Universe (scala.reflect.macros.Universe)
-
Context 同时也有一个 macroApplication,它提供了一个对宏展开处完整的AST
-
类型检查,编译警告、报错等
## 黑盒和白盒
一般来讲,黑盒(blackbox.Context)会比白盒(whitebox.Context)有更严格的类型检查
...
...
@@ -124,8 +118,8 @@ define int main() {
黑盒宏的使用,会有四点限制,主要方面是
-
类型检查
-
类型推
到
-
隐式推
到
-
类型推
导
-
隐式推
导
-
模式匹配
具体看官网
[
blackbox-whitebox
](
https://docs.scala-lang.org/overviews/macros/blackbox-whitebox.html
)
...
...
@@ -210,13 +204,13 @@ object Macros {
*
(s: c.Expr[String])
*
(tag: c.WeakTypeTag[T])
## c.Expr
##
#
c.Expr
这是Macros的表达式包装器,里面放置着类型String,为什么不能直接传String呢?
当然是不可以了,因为宏的入参只接受Expr,调用宏传入的参数也会默认转为Expr。
这里要注意, 这个
`(s: c.Expr[String])`
的入参名必须等于
`hello2[T](s: String)`
的入参名。
## WeakTypeTag[T]
##
#
WeakTypeTag[T]
有时我们无法为泛型提供边界,就需要使用WeakTypeTag,此时无法使用TypeTag和ClassTag。但是应尽可能的提供更加具体的类型给WeakTypeTag。
...
...
@@ -224,7 +218,13 @@ object Macros {
[
manifests
](
https://docs.scala-lang.org/overviews/reflection/typetags-manifests.html
)
# 关于 Universe
## 关于 Context
-
Context 封装了一个编译时 Universe (scala.reflect.macros.Universe)
-
Context 同时也有一个 macroApplication,它提供了一个对宏展开处完整的AST
-
类型检查,编译警告、报错等
## 关于 Universe
-
scala.reflect.api.Universe 提供了一个用来 Scala 反射的完整的操作集合,比如查看类型的成员,或反射出子类型
-
scala.reflect.api.JavaUniverse 是一个用在 JVM 实例上的对 Scala 反射的一个实现
...
...
@@ -239,7 +239,7 @@ object Macros {
-
FlagSet represent sets of flags that apply to symbols and definition trees
-
Constants 编译时常量相关
想要了解 Universe 最好是应用Scala反射接口,如使用Scala
注解
。
想要了解 Universe 最好是应用Scala反射接口,如使用Scala
反射操作Scala注解,了解Scala和Java反射
。
# 关于 Scala AST
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录