这两个类之间有什么区别:
class Person {
var name : String = _
var surname: String = _
}
class Person (var name:String, var surname: String)
Run Code Online (Sandbox Code Playgroud)
name和surname始终是Class Person中的字段.相等?我只是改变了实例化Person类的方式.是对的吗?
我有这个具体的课程:
class Person (var name: String, var surname: String)
Run Code Online (Sandbox Code Playgroud)
我想创建另一个扩展Person的类:
class Son (name: String, surname: String) extends Person(name, surname)
Run Code Online (Sandbox Code Playgroud)
好.但我确实希望Son的构造函数中的字段必须是var而不是val.我该如何解决?字段必须保留构造函数参数.
更新#2
我的问题如下:如果我在Son中定义一个方法,如果我将值更改为Son实例的参数,则不起作用.
class Son (name: String, surname: String) extends Person(name, surname){
def printSon = {
if(this.name=="name")println("Error name Person")
if(this.surname=="surname")println("Error surname Person")
}
}
object main {
def main(args: Array[String]): Unit = {}
val Marco = new Son("Marco","Bianchi")
Marco.printSon // So far everything is ok
Marco.name="name"
Marco.printSon // Here in control is not done, because Marco.name="name" writes in Person
println("FINE")
} …
Run Code Online (Sandbox Code Playgroud) 假设我有这两个类:
class Person (val name: String, val surname: String)
class Family (val nameFamily: String, val members: Set[Person])
Run Code Online (Sandbox Code Playgroud)
现在在main方法中实例化两个类,如下所示:
val F1 = new Family ("Red", Set(P1, P2))
val P1 = new Person ("John", "Smith")
val P2 = new Person ("Luis", "Smith")
Run Code Online (Sandbox Code Playgroud)
主要方法允许我在实例化之前输入家庭成员.我希望这是我的模特.但如果我在成员之前进入成员,那么当我去写作:
println(F1.members)
Run Code Online (Sandbox Code Playgroud)
我返回一个Set(null).
如果你先写下主要人物,就像这样:
val P1 = new Person ("John", "Smith")
val P2 = new Person ("Luis", "Smith")
val F1 = new Family ("Red", Set(P1, P2))
Run Code Online (Sandbox Code Playgroud)
我没有问题.
但是我想以任何顺序编写实例,最后运行一个家庭验证.
我可以解决这个问题.我的意思是,我可以使用稍后创建的实例初始化我的字段.
对不起英文翻译不好.
上传#1
我在Scala中实现了一个域,我使用DSL创建了域的实例.我的DSL允许我以混合顺序实例化类.例如,我创建一个Component,然后向该Component添加一些Type.然后我创建我添加到Component的Type.在主要方法中我可以做到.作为主要的最后一个陈述,我把验证.在开始验证时,键入组件没有找到任何内容,因为这些将在以后实例化.这个问题只能在主要用懒惰解决?或者是域级别的解决方案.
我有以下几套:
class Element (var Name:String, var Description: String)
var MoreElement: Set[Element] = Set(E1, E2, E3, ...)
Run Code Online (Sandbox Code Playgroud)
如何按名称删除集合MoreElement中的元素.
我找到了这个解决方案
MoreElement -= (MoreElement find (_.Name == "nameOfElementToRemove")).get
Run Code Online (Sandbox Code Playgroud)
但我不会使用get,因为如果你没有发现该项被抛出异常,但是我不希望没有异常.