小编use*_*663的帖子

Scala:类中的字段与构造函数中的参数之间的真正区别是什么

这两个类之间有什么区别:

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类的方式.是对的吗?

constructor scala field

12
推荐指数
2
解决办法
3495
查看次数

Scala:使用构造函数参数扩展具体类

我有这个具体的课程:

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)

parameters constructor scala extend

5
推荐指数
2
解决办法
8643
查看次数

Scala:使用稍后创建的实例初始化字段

假设我有这两个类:

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.在主要方法中我可以做到.作为主要的最后一个陈述,我把验证.在开始验证时,键入组件没有找到任何内容,因为这些将在以后实例化.这个问题只能在主要用懒惰解决?或者是域级别的解决方案.

scala field initialization

2
推荐指数
1
解决办法
1956
查看次数

按名称删除集合中的元素

我有以下几套:

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,因为如果你没有发现该项被抛出异常,但是我不希望没有异常.

scala element set

1
推荐指数
2
解决办法
1115
查看次数

标签 统计

scala ×4

constructor ×2

field ×2

element ×1

extend ×1

initialization ×1

parameters ×1

set ×1