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

时间:2016-02-11 12:55:36

标签: scala anonymous-function anonymous-class

我认为scala编程的最大缺点是,由于大量代码是合成/匿名类的一部分,堆栈跟踪和默认的'toString'日志通常都是无用的。

编译器生成更有用的类名/ toString方法是否有充分的理由/障碍?我觉得像赋予命名val的函数和函数的方法至少是打印方法/ val的名称而不是'function'的良好候选者。让lambda的类名显示它们所定义的方法的名称也是很好的,但是像'lambda'这样的东西也会有所改进。

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

1 个答案:

答案 0 :(得分:1)

这种方法存在一些问题。

首先,你只能围绕宏的上下文扩展,即直接围绕宏的应用位置,所以最后你的代码必须将每个函数都包含在某个方法中(然后将树扩展为具有toString方法,如下所示,这非常难看。

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

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

你可以尝试使用scala编译器插件,我相信这是一个很好的方法来做你想要的。