Urb*_*ond 5 parameters scala type-inference default-value type-erasure
我刚刚开始使用Scala.我一直在使用Python进行研究编程,而且我正在转换一个相当大的(~4000行)Python程序.
一些评论:
我的问题是:
是否计划使用默认参数为函数参数添加类型推断?写这样的东西有点烦人:
def add_words(words:Traversable[String], ignoreCase:Boolean=true,
stopwords:Set[String]=Set[String]()) {
...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,根本不需要对ignoreCase和stopwords进行类型注释,它们只是添加了不必要的详细程度.
感谢参与Scala开发的人员提出的任何意见.
Scala在很长一段时间内都添加了很多东西,但随着它越来越受欢迎,它将变得越来越稳定.2.8之前的人在修改语言方面比现在的人更有影响力 - 因为他们代表了更大比例的用户,并且因为语言更灵活.
以你的擦除问题为例.作为一个2.0用户,你有比现在更大的机会完成任务.事实上,除非Java领先,否则兼容性的影响几乎可以保证它不会再发生.
你来自脚本语言.脚本语言非常关注I/O,因为这是他们的黄油和面包.对于Scala来说,任何严肃的I/O都只是降级到Java库 - 毕竟,这就是让Scala与Java兼容的重点.
此外,您对4662的描述实际上是完全错误的.它也不会断裂可言,但改变行为再次进行论证不正确的代码工作.简而言之,这是4662:
val source = scala.io.Source.fromFile(new java.io.File("test1.file"))
use(source)
val lines = source.getLines
Run Code Online (Sandbox Code Playgroud)
既然source是Iterator,它一旦你使用它就消失了.这是巧合,您可以在调用它之后重复使用toString它,而不是内在的保证.
类型擦除并不是那么糟糕.事实上,如果它有很多障碍,它就是糟糕设计的标志 - 你不应该检查什么类型的东西,而是调用它上面的方法并让它自己处理.不是说它有时不烦人,但不是那么糟糕.唉,它是与Java无缝兼容的基本选择,而且它是非常有意识的.我没有看到Scala引领它.
Ceylon是一种承诺消除擦除并与Java保持兼容的新语言.如果锡兰能够做到这一点,而且我坚定地站在怀疑者阵营,那么Scala就可以效仿.
此外,最近关于Java 8闭包的讨论表明可能会对擦除做些什么.如果事实证明是真的,那么Scala也可以兑现.
至于这个问题,我同意可以推断出这些类型.我不确定是否有人在使用默认参数做某事 - 但目前的优先事项还在于其他地方.