我认为scala编程的最大缺点是,由于大量代码是合成/匿名类的一部分,堆栈跟踪和默认的'toString'日志通常都是无用的。
编译器生成更有用的类名/ toString方法是否有充分的理由/障碍?我觉得像赋予命名val的函数和函数的方法至少是打印方法/ val的名称而不是'function'的良好候选者。让lambda的类名显示它们所定义的方法的名称也是很好的,但是像'lambda'这样的东西也会有所改进。
可能可以使用宏 - 有没有人已经这样做了,或者它是一个很好的候选人来深入研究scala宏?
答案 0 :(得分:1)
这种方法存在一些问题。
首先,你只能围绕宏的上下文扩展,即直接围绕宏的应用位置,所以最后你的代码必须将每个函数都包含在某个方法中(然后将树扩展为具有toString方法,如下所示,这非常难看。
val test = Macro.addToString((f: Int) => f + 10)
其次,虽然你是正确的,但是当前的scala函数是匿名内容,而下一版本不会出现这种情况,因为它们将符合Java 8。这意味着功能的扩展略有不同,我相信你无法采用这种方法anyway。
你可以尝试使用scala编译器插件,我相信这是一个很好的方法来做你想要的。