我对带有 Scala 的 IntelliJ IDEA 开发环境(版本 14)的以下奇怪行为有疑问:
在我将(全局)scala SDK 从 2.11 版本重置为 2.10.4 版本后,源代码编辑器显示了许多编译错误:列表、映射、打印、(1 到 n)等都是红色的。
SDK加入全局库,jar包都找到了。
但是代码编译并正确运行(我重建了项目以强制重新编译)。有没有人经历过这样的事情?如何解决这个问题?
我使用的是 java sdk 1.7.0_55。
之前已经讨论过这个话题,但没有得到令人满意的答复(在我看来).请考虑以下scala代码:
class A(a:Int) { val _a=a }
class A1(val a:Int) { val _a=a }
class B(a:Int) extends A(a) // OK
class C(val a:Int) extends A(a) // OK
class B1(a:Int) extends A1(a) // OK
class C1(val a:Int) extends A1(a) // fails
class D1(override val a:Int) extends A1(a) // OK
Run Code Online (Sandbox Code Playgroud)
我认为将class参数声明为val只会对构造函数调用产生影响:复制参数而不是传递引用.但是,在每种情况下,类字段都被分配为val.它是否正确?
现在我不明白为什么我们在最后一行需要override关键字.请注意,我们不会将类声明为案例类,因此不会自动分配字段.
最后有一个很好的理由为什么人们甚至想要用val类参数定义类似A1的类?
提前感谢所有回复.
我想将类实例的成员函数指定为变量的第一类函数:
class A(val id:Int){ def f(u:Int)=id+u }
val a= new A(0)
val h=a.f // fails: interpreted as a.f(with missing parameter u)
val h1 = (u:Int)=>a.f(u) // OK and does what we want
Run Code Online (Sandbox Code Playgroud)
通过分配适当的匿名函数,我们可以获得所需的效果.这是唯一的方法吗?我搜查了但根本找不到任何参考.