scala:用于合成 类 和函数的 toString

scala: toString for synthetic classes and functions

我认为在 scala 中编程的最大缺点是,由于大量代码是 synthetic/anonymous classes 的一部分,堆栈跟踪和默认 'toString' 日志通常很接近没用。

是否有好的 reason/obstacle 编译器可以生成更有用的 class names/toString 方法?我觉得具体化为函数的方法和分配给命名 val 的函数至少是打印 method/val 而不是 'function' 名称的好候选者。让 lambda 的 class 名称显示它们在其中定义的方法的名称也很棒,但是再次像“$$lambda”这样的东西将是一种改进。

可能可以用宏来完成 - 有没有人已经这样做了,或者它是深入研究 scala 宏的好人选?

这种方法有几个问题。

首先,您只能围绕宏的上下文进行扩展,即直接围绕应用宏的位置进行扩展,因此最后您的代码必须将每个函数都包含在某种方法中(然后将树扩展为具有 toString 方法)如下所示,这是相当丑陋的。

val test = Macro.addToString((f: Int) => f + 10)

其次,虽然你是正确的,当前 scala 函数是匿名内部函数,但下一个版本不会是这种情况,因为它们将符合 Java 8。这意味着函数的扩展略有不同,我相信您将无法采用这种方法 anyway.

您可以尝试使用 scala 编译器插件,我相信这将是您执行所需操作的好方法。