我的应用程序中有许多功能警告,即“反射访问”,“隐式转换”和“后缀运算符”。这可以通过导入各种scala.language功能来修复。
但这是什么意思?为什么scala编译器要我明确这些?编译器显然可以看到我正在使用这些功能。
答案 0 :(得分:0)
所有这些标志都记录在scala.language
对象中。
反射访问可能具有令人惊讶的性能,并且在某些环境中无法使用(例如,具有严格安全策略的容器,或者它可能在Android上造成困难)。因此值得明确。
支持后缀运算符会在解析时产生歧义。我认为长期计划(我不会在这里为Typesafe说话)是停止在不明确启用该支持的文件中支持postfix运算符。这样可以更加一致地解析代码,如:
a b
{
...
目前不明确b
是后缀运算符还是将后续块作为参数的方法。
有些人发现隐含的转换令人困惑,有些组织禁止将其用作政策问题。有一个显式标志警告读者该文件包含隐式转换。
老实说,我认为这一举动至少部分是出于政治的动机 - 暗示和模糊的语法是表达对scala的批评的共同点 - 但特别是对于Typesafe来说,获得了企业"用户是一个主要目标,并且可以关闭"某些特征可能是迈向这一点的务实步骤。如果您乐于普遍使用这些功能,我建议您只配置相关的编译器参数(例如-language:implicitConversions
)。