- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有贪婪签名的隐式宏
implicit def materializeHelper[C <: Any]: Helper[C] = macro materializeHelperImpl[C]
def materializeHelperImpl[C <: Any: ctx.WeakTypeTag](ctx: blackbox.Context): ctx.Expr[Helper[C]] = ???
根据它的签名,它会为任何 C 实现一个 Helper[C]
。但是主体要挑剔得多。它只接受密封特征的 C
。宏应该返回什么来告诉编译器“忘记我的结果,继续你的隐式搜索,就好像我不存在一样”?
目前我正在返回一个空 block (q""
),这并不理想,因为当将所述隐式用作中间规则时,编译器会具体化一个 null
。例如,在下一行中,当宏返回空 (q""
) 时,helper
参数设置为 null。
implicit def parser[C <: Any](implicit helper: Helper[C]): Parser[C] = new Parser[C](helper)
我的意图是,在 C
不是密封特征的情况下,编译器会丢弃前面提到的隐式值并继续搜索另一个更具体的隐式值。
最佳答案
你没有让你的宏具体化类型类Helper
whitebox。
Normally implicit macros should be whitebox.
If a blackbox macro (even implicit blackbox macro) throws an exceptionthen it will be a compile error during compilation of main code. If awhitebox implicit macro throws an exception then during compilation ofmain code the implicit will be silently removed from candidates.
Implicit macro. Default implicit value. How?
https://docs.scala-lang.org/overviews/macros/blackbox-whitebox.html
使用自定义错误消息调用c.abort
更为惯用。抛出异常,调用 c.error
,返回 EmptyTree
(在这种情况下它只是不进行类型检查)也是可能的,尽管它们看起来不那么惯用(最好是有明确的编译错误信息)。
关于scala - scala 隐式宏应该返回什么来告诉编译器 "forget my result, continue your search",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64538997/
我写了我认为会很简单的代码,但它的行为不正常。 我的预期输出是: I'm fine with printing it here 3 Can be printed as much as I want 3
我将 Ruby 与 SQLite3 结合使用,不幸的是,我尝试在 Sqlite3 中使用外键没有成功。根据 sqlite3 --version,安装了 3.7.13 版本。据我所知,Sqlite3 从
使用 Perl6 的 Date 时处理格式化程序对象是否有错误?如果我在实例化对象后操作日期,则格式化程序似乎返回到默认值。 my $d = Date.new(2019, 12, 25, format
我的软件在 HKCU\Software\mysoftware 中存储了一些值,这从来都不是问题。但是,我现在还在 HKCU\Software\mysoftware\Licenses 中存储了一些值 -
我有一个看起来像这样的小终点 val numbers = it.bodyAsString.parseJsonList() processedNumbers = numberService.proces
我有一个方法 public static void startAnimation() { new AnimationThread().run(); } 其中AnimationThread实现了
下面的代码片段来 self 的程序,该程序获取单词,然后打印它们以及出现的次数。 它工作得几乎很好,除了它“忘记”之前已经保存过的特定条目并且不增加与其关联的计数器。 typedef struct {
在 c# 中,当您在异步方法中调用 await 方法时,代码将从调用上下文执行到该方法。如果我想进行一个异步调用,它将直接从同一行代码继续(即使异步操作尚未完成)而不是返回调用上下文怎么办?我该怎么做
很抱歉以愚蠢的方式提问,但我不知道如何从技术上表达。 我的项目是打字训练。如果用户写的字母(userWord[i],使用 getch() 从键盘获得)与我给他的单词中对应的字母(filas[maxIn
我有一个创建并返回 Pane 的函数,该 Pane 存储在其他地方。当用户按下按钮时会显示此信息。 public Pane createBoard(Board d){ TilePane
我目前正在研究结构类型。我怀疑两种类型仅仅因为它们碰巧有一部分结构相同就被认为是等价的。这感觉很像静态鸭子类型,它完全忽略了类型的语义级别。于是仔细查看了flow对普通对象的结构类型,遇到了如下行为:
那么,假设我有一个 users table 和一个 pages table 。假设我想允许用户隐藏/忘记/忽略某些页面。在这一点上,我可以想到两种可能的方法: 与null 的外部连接匹配: 我可以创建
我在一个实体上有一个 NSOrderedSet 关系。在我保存、退出并重新启动应用程序之前,对象的顺序是正确的。然后,当获取实体时,对于实体的某些实例,此关系的顺序与重新启动之前的顺序不同。就好像 N
我使用 SFSafariViewController 开发了一个移动应用程序来展示一个网站,其中访问过的链接使用 CSS :visited 伪类 ( https://developer.mozilla
我需要着火并忘记调用某些异步方法。我意识到 VS 建议我可以将调用设置为 _discard 并且 IDE 警告消失。但我不确定与丢弃一起使用时是否仍未等待该调用。会是吗? public async
我正在使用 Task.Run(() => this.someMethod()) 来安排后台作业。我对操作结果不感兴趣,需要继续申请流程。 但是,有时我的后台任务很长时间都没有安排。自从我们从 .Net
我有以下代码,编译器无法看到作为参数传递给函数的变量是 constexpr,这让我很恼火,因此我必须使用 arity 0 函数而不是 1 参数函数。 我知道这不是编译器错误,但我想知道是否有可以解决此
这个问题在这里已经有了答案: Strange result when removing item from a list while iterating over it (8 个回答) 关闭7年前。
我有这个代码: #!/bin/bash pids=() for i in $(seq 1 999); do sleep 1 & pids+=( "$!" ) done for pid in "
我有一个 Python Kafka 消费者应用程序,我在其中消费消息,然后同步调用外部网络服务。 Web 服务需要一分钟时间来处理消息并发送响应。 有没有办法在不等待响应的情况下使用消息、向 Web
我是一名优秀的程序员,十分优秀!